C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅相关的知识,希望对你有一定的参考价值。

01

前言

    处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Caliburn提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事件进行通讯,且彼此之间没有引用,这就实现了模块之间低耦合的通信方式。简单来说就是提供了一个多播发布/订阅功能。Caliburn的事件聚合器,这玩意实现原理是观察者模式,观察者模式也就是常说的发布/订阅模式。

02


创建事件

这里我们创建一个公共接口类PersonInfoEven并继承自PubSubEvent,并传入一个PersonInfo对象

public class PersonInfo
    
        public string Name  get; set; 
        public int Age  get; set; 
        public string Sex  get; set; 


        public override string ToString()
        
            string report = $"[Name] = [Name],[Age] = [Age],[Sex] = [Sex]";
            return report;
        


    
    public class PersonInfoEven : PersonInfo
    


    

03


订阅事件

  IEventAggregator eventAggregator;定义事件聚合器

然后通过ioc获取事件聚合器实例

this.eventAggregator =  IoC.Get<IEventAggregator>();

注意需要继承接口IHandle<PersonInfoEven>

class StartViewModel : Caliburn.Micro.Screen, IShell,IHandle<PersonInfoEven>

然后订阅

this.eventAggregator.Subscribe(this);
public void Handle(PersonInfoEven message)
        
            System.Windows.MessageBox.Show(message.ToString());
        

04


发布事件

可以选择同步发布或者异步发布:

IEventAggregator eventAggregator;
        public void EventTest()
        
            this.eventAggregator = IoC.Get<IEventAggregator>();
            //方法1 同步ui发布事件
            //this.eventAggregator.PublishOnUIThread(new PersonInfoEven()  Name = "ZYR",Age=18,Sex ="man");
            //方法2 开线程去发布
            this.eventAggregator.Publish(new PersonInfoEven()  Name = "ZYR", Age = 18, Sex = "man" , action =>
            
                //方式①
                //Task.Factory.StartNew(action);
                //方式②
                Task.Run(action);
            );
            
        

这样,一个发布/订阅的事件就完成了,也可以在任何时候取消事件注册,只需要调用Unsubscribe方法即可

由于它是多播的,你可以在任意多个地方进行发布或订阅。

05


效果演示

06


源码

链接:https://pan.baidu.com/s/1IzA0FzOhnMTE0PCU1T9dLw

提取码:在下面公众号后台,发送:提取码3,即可获取

技术群: 需要进技术群的添加小编微信zls20210502 ,备注:加群;

07


经典回顾

      因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“赞”和“在看”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点击“赞”和“在看”支持我们吧!

往期推荐

C# WPF框架Caliburn.Micro入门实例1

C# WPF MVVM项目实战(进阶①)

C# WPF MVVM项目实战(进阶②)

C# WPF框架Caliburn.Micro快速搭建

C# WPF项目实战

C# WPF mvvm模式下combobox绑定(list<enum>、Dictionary<int,string>)

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

C# WPF Caliburn.Micro框架下利用Mef加载其它项目界面

C# WPF文本框TextEdit不以科学计数法显示

C# 通过正则表达式来限制控件输入有效性

C# datagridview、datagrid、GridControl增加行号

C# =>符号的使用

C# 无意间写了一段线程死锁的代码

C# 看懂这100+行代码,你就真正入门了(经典)

C# WPF项目实战(经典)

WPF 如何修改button圆角(经典)

WPF XAML 为项目设置全局样式

以上是关于C# WPF MVVM模式Caliburn.Micro框架下事件发布与订阅的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF MVVM模式[经典]案例

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

C# WPF MVVM模式下在主窗体显示子窗体并获取结果

C# WPF MVVM模式Prism框架从零搭建(经典)

C# WPF MVVM模式Prism框架从零搭建(经典)

C# WPF MVVM模式Prism框架下事件发布与订阅