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

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


效果演示

b3b2e9b988c3ed90e422740a57fa0698.gif

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 为项目设置全局样式

be5c95b1c6ed856c0ac3e1368ef32c3c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这几部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了几部高分经典学科纪录片&#xff0c;对应文学、数学、经济学、地理、化学。这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年…

Linux 学习_在Linux下面安装tomcat

要在linux下面安装tomcat&#xff0c;首先我们需要做一些准备工作.... 下载tomcat&#xff1a; 下载地址&#xff1a;http://tomcat.apache.org/download-60.cgi 下载&#xff1a;tar.gz 如图&#xff1a; 说明&#xff1a; WinISO安装版&#xff1a;下载地址&#xff1a;http…

Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

题目链接&#xff1a;点击打开链接 题意&#xff1a; 给定T表示case数 以下4行是一个case 每行2个点&#xff0c;u v 每次u能够绕着v逆时针转90 问最少操作多少次使得4个u构成一个正方形。 思路&#xff1a; 枚举判可行 #include <iostream> #include <cmath> #inc…

欧洲的小国家究竟有多袖珍?

全世界只有3.14 % 的人关注了爆炸吧知识你走遍祖国的每个角落了吗&#xff1f;相信绝大多数人的回答是“NO”但是如果你生活在很小的国家里&#xff0c;也许一根烟&#xff0c;或者一顿午餐的时间&#xff0c;你就可以从这个国家的一端走到另一端。下面就一起看看世界上最小的国…

那些年你追过的电影竟然登上顶刊封面! 盘点思路新奇的顶刊论文

全世界只有3.14 % 的人关注了爆炸吧知识来源 | 募格课堂科研&#xff0c;是一项严肃且要求一丝不苟的研究工作。但你可曾想过&#xff0c;那些年自己追过的像葫芦娃、孙悟空等充满中国风元素的影视作品&#xff0c;竟然被科研人作为idea&#xff0c;不仅有理有据地研究还发了顶…

22504!Windows 11 新预览版发布

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已发布 Windows 11 预览版 Build 22504。Windows 11 Insider Preview Build 22504 主要变化如下&#xff1a;1.为了进一步个性化 Windows 11 的文本输入体验&#xff0c;微软为触摸键盘带来了 13 个全新主题&#xff0c…

ERROR (ClientException): Unexpected API Error

ERROR (ClientException): Unexpected API Error ERROR (ClientException): Unexpected API Errorposted on 2016-02-03 11:12 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/ruiy/p/5179253.html

火了!女教授把自己P成女娲,登上学术期刊封面

全世界只有3.14 % 的人关注了爆炸吧知识2020年4月&#xff0c;江苏师范大学化学与材料科学学院副院长石枫教授在 Chinese Journal of Chemistry 上发表了题为 Axially Chiral Aryl-Alkene-Indole Framework: A Nascent Member of the Atropisomeric Family and Its Catalytic A…

Binding在WPF中的使用

闲来无事&#xff0c;不想打DOTA&#xff0c;在这里小小研究下wpf中关于Binding的东西。 咯咯 在我们印象中&#xff0c;Binding的意思是“绑定”&#xff0c;这个“绑”大概取自于Bind这个单词吧&#xff0c;这么理解的话就是以音译英了&#xff0c;没什么实际意义。 Bind这个…

WPF 模仿IconPacks库写图标按钮

先上原链接&#xff0c;一个很不错的wpf图标库 : https://github.com/MahApps/MahApps.Metro.IconPacks提供了大量的图标可以用&#xff0c;如下图&#xff1a;&#xff08;部分截图&#xff09;简单分析了一下代码&#xff0c;并模仿它写一个图标类和简单的使用示例&#xff1…

java线程死锁 cpu 100%_一文学会Java死锁和CPU 100% 问题的排查技巧

做一个积极的人编码、改bug、提升自己我有一个乐园&#xff0c;面向编程&#xff0c;春暖花开工欲善其事&#xff0c;必先利其器00 本文简介作为一名搞技术的程序猿或者是攻城狮&#xff0c;想必你应该是对下面这两个问题有所了解&#xff0c;说不定你在实际的工作或者面试就有…

3D版的TagView,效果很赞

在gitHub看到的&#xff0c;感觉效果不错。 看看效果&#xff1a; Demo&#xff1a;http://download.csdn.net/detail/u012808234/9426716

5部高分学科纪录片,在家也能受益良多!

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了5部高分经典学科纪录片&#xff0c;这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年数学家&#xff0c;呈现最直观的数学&a…

Hibernate 对象的三种状态

Hibernate 对象的三种状态 瞬时&#xff08;transient&#xff09;: 由new操作符创建&#xff0c;且尚未与Hibernate Session关联的对象被认定为瞬时&#xff08;Transient&#xff09;的。瞬时&#xff08;Transient&#xff09;对象不会被持久化到数据库中&#xff0c;也不会…

升级Jenkins镜像,支持.NET6.0

&#xff08;寒天催日短&#xff0c;风浪与云平&#xff09;书接上文&#xff0c;上回咱们说到了《【Blog.Core开源】完成升级.NET 6.0》&#xff0c;只是代码层面的升级&#xff0c;今天趁着周末正好把生产环境也升级下&#xff08;大家可以酌情升级哟&#xff09;。过程很简单…

女朋友来大姨妈怎么办?

1 医生的工伤怎么算&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 大风车呀吱悠悠的转&#xff01;&#xff08;via&#xff1a;草多南&#xff09;▼3 买了个丑酸奶&#xff01;▼4 和老爸讨论谈恋爱&#xff08;via&#xff1a;张子乐_&#xff0…

迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

全世界只有3.14 % 的人关注了爆炸吧知识来源&#xff1a;普象工业设计小站天呐&#xff01;最新消息阿布扎比酋长国又发现220亿桶非常规可采石油让原本富有的国家更加钱上有钱尤其是它的兄弟国——迪拜简直“豪”无人性耗资800亿美元的“世界岛”惨成全球最大烂尾项目竟没有表示…

英特尔收购威盛X86业务 兆芯何去何从

日前&#xff0c;英特尔公司以1.25亿美元收购威盛麾下Centaur 公司的x86业务。Centaur 是威盛的一家子公司&#xff0c;20多年前&#xff0c;威盛依靠数笔收购获得了x86授权&#xff0c;开发了数款X86芯片&#xff0c;由于性能与英特尔和AMD差距太大&#xff0c;威盛的X86 CPU在…

.net中的mapinfo开发:准备(一)

最近开发一个项目&#xff0c;用到了mapinfo的开发&#xff0c;所以想把自己研究的一些东西记录下来&#xff0c;一则供自己使用&#xff0c;二则供一些同道中的朋友参考&#xff0c;有什么不当之处&#xff0c;请提示&#xff0c;再做修改。 首先要了解一下mapinfo的基本概念&…

java launcher 下载_Java Launcher下载并安装

通过双击资源管理器中的类文件来运行Java程序&#xff0c;并创建一个EXE和可执行的JAR文件Java启动器通过双击类文件来运行Java应用程序和小程序. 通过右键单击以图形格式查看类源代码和类层次结构&#xff1b;显示jar和zip文件的内容java下载安装&#xff0c;而不是通过右键单…