01

前言

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

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 : PubSubEvent<PersonInfo>{}

03

订阅事件

IEventAggregator eventAggregator;定义事件聚合器

然后获取事件聚合器实例

this.eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();

并通过IEventAggregator的GetEvent获取定义的消息,再通过Subscribe方法注册,Subscribe是一个委托方法

eventAggregator.GetEvent<PersonInfoEven>().Subscribe(ShowNews);
private void ShowNews(PersonInfo obj){TxtLabel = $"{obj.ToString()}";}

04

发布事件

//创建一个命令,当执行该命令时执行发布事件的逻辑
PubSubEventCommand = new DelegateCommand(PubSubEventMessage);//发布事件方法
private void PubSubEventMessage(){eventAggregator.GetEvent<PersonInfoEven>().Publish(new PersonInfo() {Name ="zyr",Age = 18,Sex = "nan" });}

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

eventAggregator.GetEvent<PersonInfoEven>().Unsubscribe(ShowNews);//解除订阅

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

05

效果演示

06

源码

链接:https://pan.baidu.com/s/1H3HtTRAZVS-FlReTe00yxQ

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

技术群: 需要进技术群的添加小编微信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模式Prism框架下事件发布与订阅相关推荐

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

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

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

    01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...

  3. wpf mvvm模式下CommandParameter传递多参

    wpf mvvm模式下CommandParameter传递多参 原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递 ...

  4. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  5. 使用WPF+MVVM模式的小案例

    WPF+MVVM模式的小案例案例主要的目录结构 下面一步一步建立整个小程序的目录和相应的代码程序. 1.打开VS, 新建项目WPFDemo.Client.CustType(自己可以写自己的程序名称,这 ...

  6. WPF MVVM模式 发送DataGird表格的数据到另一个页面显示

    WPF MVVM模式 发送DataGird表格的数据到另一个页面显示 这里我们是使用Messenger消息机制把这个页面的表格行数据发送到另一个页面显示,效果如下图: 首先在这个表格页面的ViewMo ...

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

    01 - 前言 在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以: Form2 f2 = new Form2();f2.Show(); 或者 Form2 f2 = new ...

  8. WPF MVVM模式下的无阻塞刷新

    MVVM模式下的无阻塞刷新的两种方法: //传统模式下的无刷新调用(主线程开新线程,新线程又调用主线程来更新UI) //第1步先在线程内部计算出需要绑定的数据 //第2步然后再使用Invoke/Beg ...

  9. WPF MVVM模式的应用——室内监控可视化

    需求 在物联网应用中,可视化端经常需要将实物信息详细的呈现到用户视野之中.在室内环境中,经常可见的设备空调和灯.本次课题主要以室内环境的温湿度和房间用能情况出发,实现室内温湿度和能耗信息的可视化.为了 ...

最新文章

  1. CCS中各个项目文件的作用
  2. 层次聚类多维度matlab实现_第34集 python机器学习:凝聚聚类
  3. BZOJ 3622 Luogu P4859 已经没有什么好害怕的了 (容斥原理、DP)
  4. C++ 基础 : 函数重载、引用、内联函数、auto、范围for循环
  5. COM组件设计与应用(十三)(转载)
  6. nodejs+supertest+mocha 接口测试环境搭建
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的高铁售票系统
  8. iOS之路10-给xib设置约束注意
  9. 软件测试--中间件介绍
  10. 音乐人高嘉丰在 Opensea 发布音乐 NFT
  11. java poi doc转docx_POI动态插入数据到Word文档
  12. 【收藏】机器学习与深度学习核心知识点总结
  13. DPDK框架原理简介(0003转)
  14. 有关编辑距离计算的一点整理。
  15. WIN7英文语言包下载,安装,使用
  16. 企业服务总线 ESB 介绍和用例
  17. C# 网上收集的一些所谓的开源项目
  18. 对于C语言中的指针**P的理解,C语言指针**p是什么意思
  19. 增量备份与差异备份的区别(Incremental vs. differential backup: A comparison)
  20. 赋能IT,创新价值——互联网时代企业IT转型实践

热门文章

  1. WSUS服务器的建立以及客户端发布
  2. 怎样判断ios app 第一次启动
  3. 被娱乐在线报道的“唐骏造假门事件”
  4. MessagePack Java 0.6.X List, Map 对象的序列化和反序列化
  5. Mircosoft 正式把Windows Mobile改名为Windows Phone,你会因此而购买Windows Phone吗?
  6. 强制禁用gitlab的双因子认证:Two-Factor Authentication
  7. [sol]250OJ 1~10
  8. input file实现批量上传
  9. ASP.NET登录以及注册
  10. 【转】js老生常谈之this,constructor ,prototype