首页 > 其他分享 >WPF Prism事件聚合器-订阅/发布事件

WPF Prism事件聚合器-订阅/发布事件

时间:2023-10-26 11:11:59浏览次数:31  
标签:DelegateCommand regionManager eventAggregator Prism 事件 using WPF public

天下武功 一脉相承

结合JS理解更容易理解:https://www.cnblogs.com/douyuanjun/p/17465402.html

MainWindow.xaml

<Window x:Class="BlankApp1.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        WindowStartupLocation="CenterScreen"
        Title="{Binding Title}" Height="350" Width="525" >
    <Grid>
        <StackPanel>
            <Button FontSize="30" Command="{Binding OpenCommand}" Content="订阅"/>
            <Button FontSize="30" Command="{Binding SendCommand}" Content="发布"/>
            <TextBlock FontSize="30" Text="{Binding Title}"/>
        </StackPanel>
    </Grid>
</Window>

ViewModels/MainWindowViewModel

using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System.ComponentModel.Design;
using System.Windows;

namespace BlankApp1.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {

        private string _title = "Prism Application";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }
        /**
        private readonly IRegionManager regionManager;

        public MainWindowViewModel(IRegionManager regionManager)
        {
            this.regionManager = regionManager;
            regionManager.RegisterViewWithRegion("ContentRegion", typeof(ViewA));
        }
        **/
        public MainWindowViewModel(IEventAggregator eventAggregator)
        {
            //订阅
            OpenCommand = new DelegateCommand(() =>
            {
                eventAggregator.GetEvent<MessageEvent>().Subscribe(OnMessageReceived);
                //事件过滤器
                /**
                eventAggregator.GetEvent<MessageEvent>().Subscribe(OnMessageReceived,ThreadOption.PublisherThread,false,msg =>
                {
                    if (msg.Equals("hello_")) return true;
                    else
                        return false;
                });
                **/
            });
            //发布
            SendCommand = new DelegateCommand(() =>
            {
                eventAggregator.GetEvent<MessageEvent>().Publish("hello_ok");
            });
            //取消订阅
            UnCommand = new DelegateCommand(() =>
            {
                eventAggregator.GetEvent<MessageEvent>().Unsubscribe(OnMessageReceived);
            });
        }
        public void OnMessageReceived(string message)
        {
            Title += message + "\r\n";
        }
        public DelegateCommand OpenCommand { get; set; }
        public DelegateCommand SendCommand { get; set; }
        public DelegateCommand UnCommand { get; set; }
    }
    public class MessageEvent : PubSubEvent<string>
    {

    }
}

标签:DelegateCommand,regionManager,eventAggregator,Prism,事件,using,WPF,public
From: https://www.cnblogs.com/douyuanjun/p/17788957.html

相关文章

  • WPF笔记
    一、XAML代码界面        创建项目后,系统自动生成窗口元素其内容为网格元素。        格式:<元素名属性=“值”>内容</元素名>           或<元素名属性=“值”/>           或<元素名/>窗口元素        管理、配置、......
  • EventLoop(事件循环)
    EventLoop(事件循环)一、前言JS任务分为同步任务(非耗时任务)和异步任务(耗时任务),异步任务又分为宏任务和微任务。eventloop:JS主线程不断的循环往复的从任务队列中读取任务,执⾏任务,这种运⾏机制称为事件循环(eventloop)二、同步和异步​ JS是单线程执行的语言,在同一个时间......
  • WPF 纯xaml实现控件运动动画
    1、Image控件加载后上下运动2、Image控件可以放在Grid等布局控件中3、指定加载时触发动画:EventTriggerRoutedEvent="Image.Loaded"4、指定动画的起止位置,和运动周期1<ImageGrid.Row="1"Grid.Column="1"VerticalAlignment="Top"Margin="0,40,0,0"Ho......
  • 基于WPF的windows程序UI自动化测试总结
    一、框架工具说明工具说明使用pytest框架开源自动化测试框架批量或者指定用例运行Pytest框架支持此功能生成html测试报告使用allure库用例设计和结果分离PO模式用户登录封装用pytest的setup和teardown截图功能使用UIAuto......
  • 【Java 进阶篇】JavaScript 事件详解
    在本篇博客中,我们将深入探讨JavaScript事件,这是网页交互的核心。我们将从什么是事件开始,然后逐步介绍事件的类型、如何注册事件、事件处理程序、事件对象以及事件冒泡等相关内容。最终,我们将提供大量的示例代码来帮助您更好地理解JavaScript事件。什么是事件?在Web开发中,事件是用户......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)
    在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基于CommunityToolkit.Mvvm和HandyControl的WPF应用......
  • WPF ItemsControl 卡顿 数据量大 虚拟化 优化
    <ItemsControlItemsSource="{BindingMemberInfos}"VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="50">......
  • BOM、DOM、事件监听
    BOM概念:BrowserObjectModel浏览器对象模型,允许JavaScript与浏览器对话,JavaScript将浏览器的各个组成部分封装为对象组成:Window:浏览器窗口对象Navigator:浏览器对象Screen:屏幕对象History:历史记录对象Location:地址栏对象 Window:浏览器窗口对......
  • windows安全事件查看及安全事件id汇总
    Win+R打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”;或者右键我的电脑-管理-系统工具-事件查看器。在事件查看器中右键单击系统或安全日志,选择筛选当前日志,在筛选器中输入下列事件ID即可。日志路径:C:\Windows\System32\winevt\Logs查看日志:Security.evtx、System.evtx......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(12) -- 使用
    1、代码生成工具Database2Sharp生成WPF界面代码WPF应用端的基础接口,和Winform端、Vue3+ElementPlus前端一样,都是调用SqlSugar开发框架中的相关业务接口,如果对我们的SqlSugar框架还有疑问,可以参考我的随笔集《SqlSugar开发框架》进行系列的学习或了解。要了解项目的快速生成,需要......