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…

穷竭搜索

/**穷竭搜索是将所有的可能性罗列出来&#xff0c;在其中找到答案的方法&#xff0c;这里我们主要介绍深度优先搜索和广度优先搜索* author Think**/ public class 穷竭搜索 {public static void main(String[] args) {}//计算阶层 n&#xff01;n*(n-1)&#xff01;public sta…

JQUERY插件学习之jQuery UI

jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序。所有插件测试能兼容 IE 6.0, Firefox 3, Saf…

java 数组拼接字符串_如何在java里java字符串数组合并成一个数组?

展开全部java里java字符串数组合并成一个数组方法如下&#xff1a;//方法一 Arrays类String[] a {"A","B","C"};String[] b {"D","E"};// List list Arrays.asList(a); --OK// List list Arrays.asList("A",…

如何通过 C# 判断某个 IP 是否属于某IP段?

咨询区 Ricky&#xff1a;如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内&#xff1f;比如这样的段&#xff1a;172.16.11.5 - 100&#xff0c;另外不知道 C# 中是否有现成的轮子可以做这件事 ?回答区 BuddhiP&#xff1a;可以考虑使用 jsakamoto 大佬写的工具包&am…

百度2012校招笔试题之全排列与组合

算法题目&#xff1a; 求一个全排列函数&#xff1a; 如p([1,2,3])输出&#xff1a;[123],[132],[213],[231],[321],[323]. 思路&#xff1a;采用字典序的排序的方法 代码实现&#xff1a; void swap(char *a,char *b) {char temp;temp*a;*a*b;*btemp; }void reverse(char *di…

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

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

蚂蚁算法

public class 蚂蚁算法 { /** * 有n个蚂蚁每秒速度在Lcm的杆子上爬行,蚂蚁到杆子端点就会掉下去,蚂蚁相遇,交错通过,只能各自反方向爬回去, * 对于每只蚂蚁我们知道它离杆子左端的距离是Xi,但是不知道它当时的朝向,请计算所有蚂蚁落下杆子所需要的最短时间和 * 最长时间 …

php 输出缓冲区清理

bool ob_end_flush ( void )这个函数将送出最顶层缓冲区的内容&#xff08;如果里边有内容的话&#xff09;&#xff0c;并关闭缓冲区。如果想进一步处理缓冲区中的内容&#xff0c;必须在 ob_end_flush()之前调用 ob_get_contents()&#xff0c;因为在调用 ob_end_flush()后缓…

企业文化和价值观

看标题&#xff0c;是个很大的范围&#xff0c;不过&#xff0c;在这里不打算详细展开的来说&#xff0c;简单说说吧。 价值观&#xff1a;客戶第一&#xff0c;協作&#xff0c;高效 A.客戶第一&#xff0c;客戶的利益優先&#xff0c;原因无需多解釋&#xff0c;没有客户&…

java ftp 判断目录存在_java判断ftp目录是否存在的方法

本文为大家分享了java判断ftp目录是否存在的方法&#xff0c;供大家参考&#xff0c;具体内容如下package com.soft4j.log4j;import java.io.IOException;import sun.net.ftp.FtpClient;public class FtpTest{static String middle_ftpServer "10.103.2.250";static…

让前端与后端异步起来

有时&#xff0c;后台处理批量数据&#xff0c;需要一定的时间&#xff0c;如果处理一部分往前台送一部分&#xff0c;用户体验要好一些&#xff0c;这样就用到这个知识点了。后台代码中下&#xff1a;[HttpGet("/getents")]public async IAsyncEnumerable<Entity…

六款小巧的HTTP Server[C语言] - 贵贵的博客 - 开发|架构|开源|共享

六款小巧的HTTP Server[C语言] - 贵贵的博客 - 开发|架构|开源|共享六款小巧的HTTP Server[C语言]keminar 发表于 2010-02-05 23:14:41. 发表在:开源软件1、micro_httpd - really small http server 特点&#xff1a; 支持安全的 .. 上级目录过滤 支持通用的MIME类型 …

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

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

【Linux学习009】脚本编程之变量、条件测试和条件判断

一、Bash环境变量bash中变量有四种种类型&#xff1a;环境变量、本地变量&#xff08;局部变量&#xff09;、位置变量、特殊变量。1.环境变量环境变量作用范围最广&#xff0c;所有子bash进程都能够访问环境变量中的值&#xff0c;定义环境变量的方法是使用export关键字。举例…

特定视图呈现时发生的事件顺序

特定视图呈现时发生的事件顺序&#xff1a; 动作方法返回的ViewResult执行 ViewResult 使用ViewEngineCollection查找视图 ViewEngineCollection给每个注册的IViewEngine解析该视图的机会。顺序由集合中视图引擎的顺序决定 ViewResult使用ControllerContext&#xff0c;视图名称…

java 学习思路_Java的学习思路

1 开发环境Java SDK 下载和安装2 jvm 虚拟机运行原理3 编程基础 标识符命名规范4 Java数据类型5 运算符6 分支语句(if,switch)7 循环语句(for,while)8 函数的定义方法9 面向对象基础 面向对象与面向过程语言之间的区别10 面向对象基本思想(封装)11 类的定义方法12 对象和类的关…

22504!Windows 11 新预览版发布

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