WPF自定义控件,聚合器模式传递消息

背景:自定义控件的消息传递和方法的调用可以使用聚合器来进行

定义聚合器:

public class EventAggregator
{public static ConcurrentDictionary<Type, List<Action<object>>> _handles = new ConcurrentDictionary<Type, List<Action<object>>>();// 订阅方法public void Register<T> (Action<object> action){if (!_handles.ContainsKey(typeof (T))){_handles[typeof (T)] = new List<Action<object>> ();}_handles[typeof(T)].Add(action);Debug.WriteLine(_handles[typeof(T)].Count);}// 给数据给调用的方法public void Send<T> (object obj){if (_handles.ContainsKey(typeof(T))){foreach (var actionin in _handles[typeof(T)]){actionin?.Invoke(obj);}}}}

使用单例模式访问聚合器:

public class EventAggregatorRepository
{public EventAggregator eventAggregator;private static EventAggregatorRepository aggregatorRepository;private static object _lock = new object();public EventAggregatorRepository(){eventAggregator = new EventAggregator();}// 单例,只要一个事件聚合器public static EventAggregatorRepository GetInstance(){if (aggregatorRepository == null){lock (_lock){if (aggregatorRepository == null){aggregatorRepository = new EventAggregatorRepository();}}}return aggregatorRepository;}}

在发送消息的控件中:

public SendMsgControlViewModel()
{SendMsgCommand = new RelayCommand<Student>(SendMsg);
}private void SendMsg(object t)
{Student student = new Student(){Name = "梨花",Id = 12,};EventAggregatorRepository.GetInstance().eventAggregator.Send<Student>(student);
}

接收消息的控件中

public MainWindowViewModel()
{EventAggregatorRepository.GetInstance().eventAggregator.Register<Student>(ShowData);
}private void ShowData(object obj)
{Student student = (Student)obj;Receive = student.Name;  // 需要显示的属性绑定MessageBox.Show(Receive);
}

相关:WPF中MVVM手动实现PropertyChanged和RelayCommand-CSDN博客

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

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

相关文章

02 Redis之配置文件

3. Redis配置文件 3.1 网络部分 首先明确&#xff0c;tcp-backlogestablished Linux 内核 2.2 版本之后&#xff08;现在大部分都是3.x了&#xff09; TCP 系统中维护了两个队列, 用来存放TCP连接 a. SYN_RECEIVED 队列中存放未完成三次握手的连接 b. ESTABLISHED队列中存放已…

Java面试题之序列化和反序列化

Java面试题之序列化和反序列化 文章目录 Java面试题之序列化和反序列化序列化和反序列化什么是序列化?什么是反序列化?如果有些字段不想进行序列化怎么办&#xff1f;常见序列化协议有哪些&#xff1f;为什么不推荐使用 JDK 自带的序列化&#xff1f; 文章来自Java Guide 用于…

windows c++qt获取本机网卡信息

利用qt自带的QNetworkInterface接口以及cIphlpapi库&#xff0c;获取当前windows电脑下的网卡型号、物理地址、ip地址、子网掩码、网关等信息。 #include <QtNetwork/QNetworkInterface>#include <iostream> #include <Windows.h> #include <iphlpapi.h&…

腾讯云4核16G服务器价格,用于幻兽帕鲁Palworld专用

腾讯云幻兽帕鲁服务器4核16G、8核32G和16核64G配置可选&#xff0c;4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64G35M配置580元年1个月、1740元3个月、6960元一年&#xff0c;腾讯云百科txybk.com分享腾讯云幻兽帕鲁…

wsl装ubuntu的home目录在哪,如何更改home?

wsl安装的ubuntu目录默认情况是在&#xff0c;C:\Users\xxx\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs目录中。 上面注意需要勾选显示隐藏文件复选框。 默认情况下&#xff0c;Ubuntu 安装到 WSL 子系统中的根目录中。这…

腾讯云幻兽帕鲁专有服务器配置价格表,4核16G、8核32G

幻兽帕鲁服务器配置CPU内存多大合适&#xff1f;如何选择&#xff1f;最低4核8G起步&#xff0c;4核16G是官方推荐配置&#xff0c;最好是4核32G配置。阿腾云atengyun.com分享幻兽帕鲁Palworld服务器CPU内存配置及租用费用&#xff0c;如下图&#xff0c;Palworld官方推荐服务器…

特征点匹配 harris

算法的核心是利用局部窗口在图像上进行移动&#xff0c;判断灰度是否发生较大的变化。如果窗口内的灰度值&#xff08;在梯度图上&#xff09;都有较大的变化&#xff0c;那么这个窗口所在区域就存在角点。 这样就可以将 Harris 角点检测算法分为以下三步&#xff1a; 当窗口…

【Java面试】Mysql

目录 sql的执行顺序索引的优点和缺点怎么避免索引失效(也属于sql优化的一种)一条sql查询非常慢&#xff0c;我们怎么去排查和优化&#xff1f;存储引擎 MylSAM和InnoDB、Memory的区别事务的四大特性(ACID)脏读、不可重复读、幻读事务的隔离级别&#xff1f;怎么优化数据库SQL优…

第十六章 : Spring Cloud集成 Spring Boot Admin的监控告警

第十六章 : Spring Cloud集成 Spring Boot Admin的监控告警 本章知识点:本章将系统全面地介绍Spring Boot Admin组件与Nacos组件集成,重点介绍Admin监控背景、应用场景案例以及监控服务内容;监控服务内容包括服务信息、健康状态、元数据、进程、线程、垃圾回收情况、堆内存…

云计算中的弹性是什么?

云弹性是指当客户需求增加或减少时&#xff0c;自动从数据中心配置和取消配置资源。这使得云资源(包括计算、存储和内存资源)能够根据需求变化快速重新分配。CPU/处理、内存、输入/输出带宽和存储容量等计算资源可以根据需要增加或减少&#xff0c;而不会影响系统性能。 它旨在…

算法学习系列(二十九):裴蜀定理、扩展欧几里得算法

目录 引言一、裴蜀定理二、扩展欧几里得算法模板三、公式推导四、例题1.扩展欧几里得算法模板题2.线性同余方程 引言 这个扩展欧几里得算法用的还是比较多的&#xff0c;而且也很实用&#xff0c;话不多说直接开始吧。 一、裴蜀定理 裴蜀定理&#xff1a;对于任意正整数 a 和…

Android保存图片到系统图库并通知系统相册刷新

1.场景 在android开发中保存应用的图片并插入到系统图库同时通知相册刷新的功能&#xff0c;做完后发现在部分手机上出现虽然图片保存成功了&#xff0c;但是相册却找不到图片的问题&#xff0c;查找文件夹图片也已经存在&#xff0c;可就是在相册里刷新不出来。 2.思路 2.1.…

应急消防应用步入“繁花”时代,卓翼智能消防无人机顺势而行大有可为

近日&#xff0c;北京卓翼智能科技有限公司&#xff08;以下简称“卓翼智能”&#xff09;宣布完成超亿元B轮融资&#xff0c;融资金额高达2.5亿元。这个“智能无人系统”黑马品牌&#xff0c;凭什么出圈&#xff1f;重点发力在哪些领域呢&#xff1f;今天&#xff0c;带你走进…

2726. 使用方法链的计算器

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 设计一个类 Calculator 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时&am…

设计模式-生成器设计模式

什么是生成器设计模式 众所周知我们设计代码的时候要将代码设计出模块化的&#xff0c;一个功能是一个模块&#xff0c;那么生成器设计模式&#xff0c;是将一个类再度进行了一个拆分&#xff0c;让一个类的内部进行了单一职责化&#xff0c;其实我们在平时开发的时候就会不经…

分布式id-Leaf算法

一、介绍 由美团开发&#xff0c;开源项目链接&#xff1a;https://github.com/Meituan-Dianping/Leaf Leaf同时支持号段模式和snowflake算法模式&#xff0c;可以切换使用。ID号码是趋势递增的8byte的64位数字&#xff0c;满足上述数据库存储的主键要求。 Leaf的snowflake模…

交叉导轨为何要保持日常清洁?

在工业自动化的发展中&#xff0c;交叉导轨因其具有精度高、高刚性、高耐磨性等特点&#xff0c;在数控技术的发展中得到了越来越多的使用&#xff0c;对于交叉导轨来说&#xff0c;保持日常清洁对其性能和寿命具有重要意义。 1、防止灰尘和杂质的侵入&#xff1a;交叉导轨在机…

嵌入式学习第十一天

1.数组和指针的关系: 1.一维数组和指针的关系: int a[5] {1, 2, 3, 4, 5}; int *p NULL; p &a[0]; p a; 数组的数组名a是指向数组第一个元素的一个指针常量 a &a[0] a 的类型可以理解为 int * 有两种情况除…

五步安装和配置CLion的ESP-IDF开发框架

记录CLion安装和配置ESP-IDF开发框架 真无语了&#xff0c;弄了半天多&#xff0c;近一天&#xff0c;这里弄那里弄。记录一下&#xff0c;万一后面还要踩坑呢&#xff01; 弄一早上components的编写和使用&#xff08;想用别人的components&#xff09;&#xff0c;下午弄开…

Java基础-实现猜数字小游戏

1. 实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字&#xff1b; 2. 要求用户从控制台输入数字&#xff0c;若输入的数字比随机数小&#xff0c;则提示太小了&#xff1b;若输入的数字比随机数大&#xff0c;则提示太大了&#xff0c;若输入的数字与随机数相同…