WPF中消息传递——MVVM Messenger的简单使用

目录

1. 问题

2. 介绍

3. 使用

4. 示例


1. 问题

如何在子界面中的按钮点击后,将子界面的一些信息传递给主界面中的对象?

类似于这种应该如何处理?

Messenger的消息机制是很简单的处理方式。

2. 介绍

Messenger 是 MVVM Light Toolkit 框架中的一个类库,用于实现 ViewModel 和 View 之间的消息通信。它是一种轻量级、简单易用的消息传递机制,可以有效地解耦 ViewModel 和 View 的依赖关系,从而提高代码的可维护性和可测试性。

使用 Messenger,开发人员可以将 ViewModel 和 View 解耦,并且不必引用或了解彼此的详细信息。ViewModel 可以发送消息,而 View 只需要注册感兴趣的消息,并在接收到消息时采取相应的行动。


3. 使用

/// <summary>
/// 注册订阅事件  (在 View 或 ViewModel 中注册对特定消息的处理方法)
/// </summary>
/// <typeparam name="TMessage">传参类型</typeparam>
/// <param name="recipient">订阅实例</param>
/// <param name="token">发送与接收定义的key值</param>
/// <param name="action">订阅事件触发的action</param>
/// <param name="keepTargetAlive">持续控制实例存在,防止被回收清除</param>
public void Register<TMessage>(object recipient, object token, Action<TMessage> action, bool keepTargetAlive = false);

/// <summary>
/// 注销订阅事件  (取消在 View 或 ViewModel中对特定消息的处理方法的注册)
/// </summary>
/// <typeparam name="TMessage">传参类型</typeparam>
/// <param name="recipient">订阅实例</param>
/// <param name="token">发送与接收定义的key值</param>
void Unregister<TMessage>(object recipient, object token);

/// <summary>
/// 被订阅方触发事件  (在 ViewModel中发送消息,将消息发送给已经注册了该消息的所有接收器)
/// </summary>
/// <typeparam name="TMessage">传参类型</typeparam>
/// <param name="message">参数数据</param>
/// <param name="token">key</param>
public void Send<TMessage>(TMessage message, object token);

三种功能每种都有适用于不同功能的重载,这里只列出一种。

4. 示例

(1)在捕捉方注册

//1. 常规方式,传入执行函数
Messenger.Default.Register<ModelInfo>(this, "ModelInfo", GetMsg);     

//2. Lambda方式
Messenger.Default.Register<ModelInfo>(this, "ModelInfo", (info) =>
{
    mModelInfo = info;
});

(2) 在发送方触发

Messenger.Default.Send<ModelInfo>(ModelInfo, "ModelInfo");

这样执行Send之后,捕捉方就可以收到该消息,并且获取需要的数据,简单方便。

(3)不需要时在捕捉方注销

Messenger.Default.Unregister<ModelInfo>(this, "ModelInfo");

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值