C# CommunityToolkit.Mvvm全局事件

实现全局事件定义,可以自动回收

第一步:nuget安装CommunityToolkit.Mvvm

第二步:定义一个通讯类

csharp 复制代码
/// <summary>
/// 信息通讯
/// </summary>
public class GlobalMessage
{
    /// <summary>
    /// 菜单通讯
    /// </summary>
    /// <param name="MenuName">主菜单名称</param>
    /// <param name="SonMenuName">子菜单名称</param>
    /// <param name="Datas">数据</param>
    public record MenuChangedMessage(Window mainWindow, string MenuName, string SonMenuName = "", object Datas = null);
}

第三步:订阅

csharp 复制代码
WeakReferenceMessenger.Default.Register<MenuChangedMessage>(this, (r, m) =>
{
	if (m.mainWindow == this)
	{
	    SetMenu(m.MenuName, m.SonMenuName, m.CantileverNo, m.Datas);
	}
});

第四步:发送

csharp 复制代码
WeakReferenceMessenger.Default.Send(new MenuChangedMessage(this._mainWindow, _sonMenuName, "", 0, _currentFeederDatas));

注意重复订阅与订阅之后重复触发(非重复发送)解决方案

csharp 复制代码
public partial class GuideOperationPopView : UserControl, INotifyPropertyChanged, IBaseClass, IRecipient<MenuChangedMessage>
{
	// 其他代码
	// 订阅修改
    public GuideOperationPopView(Window mainWindow)
    {
        InitializeComponent();
        
        // 先注销,再注册
        WeakReferenceMessenger.Default.Unregister<GlobalTransmitInformationToFromEvent>(this);
        WeakReferenceMessenger.Default.Register<GlobalTransmitInformationToFromEvent>(this); // 会调用 Receive 方法
	}
	
	// 实现接口
    public void Receive(MenuChangedMessage message)
    {
        // 业务处理
    }
}

主要看IRecipient<MenuChangedMessage>将注册交给接口处理,步骤三的写法也是可以的,但是尽量避免线程中发送订阅,如果涉及到线程最好用最后提供的解决方法。

以上提供的代码因为有一部分涉及到业务就没有写,自己写的时候根据这个完善一下。

相关推荐
samble9 分钟前
从零搭建灌装监控系统(十):生产追溯,条码触发自动记录
c#·wpf·mvvm·modbus·工业控制
IT_陈寒22 分钟前
Vue的v-if和v-for混用居然是个天坑
前端·人工智能·后端
天衍四九-27 分钟前
【无标题】
前端·spring boot·mysql·nginx·docker
广州华水科技29 分钟前
2026年单北斗GNSS变形监测系统推荐榜单,解锁GNSS位移监测新高度
前端
用户13051807121531 分钟前
JDBC学习DAY2:从Statement到PreparedStatement
java
xcyxiner33 分钟前
DicomViewer24 修复编译bug(window test 失败)
前端·qt
蛋蛋的就会顺顺的1 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
linux_cfan1 小时前
videojs v10 源代码系列解读:34 · `createComposition`:类型安全的冲突检测
前端·安全
周杰偷奶茶1 小时前
【Java】数组的定义和使用(附管理系统实战案例)
java·开发语言