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,即可获取

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

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框架下事件发布与订阅相关推荐

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

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...

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

    01 - 前言 MEF是微软自家的托管可扩展框架,在这里我把它用成了ioc容器.在Caliburn.Micro框架下,view和viewmodel被注入到CompositionContainer容器中 ...

  3. C# WPF MVVM开发框架Caliburn.Micro 关于Conventions⑧

    01 - 关于Conventions Caliburn.Micro的一个主要特性是,它能够通过一系列约定消除对锅炉铭牌代码的需求.有些人喜欢习俗,有些人讨厌习俗.这就是为什么CM的约定是完全可定制的, ...

  4. C# WPF MVVM开发框架Caliburn.Micro Screens, Conductors 和 Composition⑦

    01 - Screens, Conductors and Composition Actions, Coroutines and Conventions往往最能吸引Caliburn.Micro的注意力 ...

  5. C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

    01 - 自定义引导程序 在上一部分中,我们讨论了Caliburn.Micro WPF应用程序的最基本配置,并演示了与操作和约定相关的两个简单功能.在这一部分中,我想进一步探讨Bootstrapper ...

  6. C# WPF MVVM开发框架Caliburn.Micro入门介绍①

    01 - Caliburn.Micro简介 Caliburn.Micro是一套基于XAML的MVVM模式的开发框架,它小巧而强大.在CaliburnMicro中只需要按照约定把View的名字加上后缀V ...

  7. C# WPF MVVM开发框架Caliburn.Micro View / View Model 命名⑨

    01 - 约定 在收到Caliburn Micro中有关视图和ViewModel解析的反馈后,我们添加了新功能,以简化类型解析,同时保持驱动它的健壮的基于正则表达式的名称转换机制.为了更好地了解这些新 ...

  8. C# WPF MVVM开发框架Caliburn.Micro IResult和协同程序⑥

    " 引言部分,总领全篇文章的中心内容." 01 - IResult and Coroutines 在前面,我提到了Actions概念的另一个引人注目的特性,称为协同程序.如果你以前 ...

  9. C# WPF MVVM开发框架Caliburn.Micro快速搭建③

    01 - 启动项目 打开Visual Studio 创建一个名为"Caliburn.Micro.Hello"的新WPF应用程序 添加对Caliburn.Micro Nuget包的引 ...

最新文章

  1. 把事务封装成类似Serializable用法的特性
  2. java中的图形界面编辑界面_第58节:Java中的图形界面编程-GUI
  3. 【壁纸】(可商用) 70枚壁纸高清免费
  4. Burst trie(爆炸式字典树)解读
  5. 设计模式 -- 亨元模式(FlyWeight Pattern)
  6. ZeroC IceBox介绍及demo构建
  7. RHEL 6 LAMP(一)
  8. 简历制作器App隐私政策
  9. 全志F1C100s使用记录:资料索引与基础说明
  10. win10虚拟机连接服务器失败怎么办,Win10虚拟机无法连接网络的解决方法教程
  11. Windows下HdWiki安装步骤
  12. 【蓝桥杯集训·每日一题】AcWing 3777. 砖块
  13. dble配置mysql主从同步
  14. 查找文献时找不到全文的解决方法
  15. 2022-7-8 Leetcode 904.水果成篮
  16. 电池续航智能穿戴设备突破瓶颈
  17. java 获取resource底下文件的字符内容
  18. 算法006:二分查找 递归、非递归
  19. C++ QT结合FFmpeg实战开发视频播放器-08播放器项目的整体UI架构
  20. vr技术属于计算机什么领域的应用,vr技术是什么_vr技术应用领域

热门文章

  1. 衡水启动智能公交系统
  2. web————http(报文详解篇)
  3. 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
  4. 出版社宣传片该怎么拍?
  5. 房地产开发流程(详细)
  6. 矩阵分析L6矩阵函数
  7. can报文信号矩阵分析
  8. Gbase8a数据库安装与使用
  9. 小程序 UnionID详解和使用场景
  10. android中怎么实现点击按钮进行页面的跳转