WPF之View、ViewModel之间的相互交互(二)

1、Messager交互结构和消息类型

衔接上篇,Messeger是信使的意思,顾名思义,他的目是用于View和ViewModel 以及 ViewModel和ViewModel 之间的消息通知和接收。

Messenger类用于应用程序的通信,接受者只能接受注册的消息类型,另外目标类型可以被指定,用Send<TMessage, TTarget>(TMessage message)实现,在这种情况下信息只能被传递如果接受者类型和目标参数类型匹配,

message可以是任何简单或者复杂的对象,你可以用特定的消息类型或者创建你自己的类型继承自他们。

 

交互结构如下所示:

消息类型如下表所示:

message消息对象类型说明
MessageBase简单的消息类,携带可选的信息关于消息发布者的
GenericMessage<T>泛型消息
NotificationMessage用于发送一个string类型通知给接受者
NotificationMessage<T>和上面一样是一个,且具有泛型功能
NotificationMessage向接受者发送一个通知,允许接受者向发送者回传消息
NotificationMessageAction<T>NotificationMessage的泛型方式
DialogMessage发送者(通常是View)显示对话,并且传递调用者得回传结果(用于回调),接受者可以选择怎样显示对话框,可以使是标准的MessageBox也可也是自定义弹出窗口
PropertyChangedMessage<T>用于广播一个属性的改变在发送者里,和PropertyChanged事件有完全箱体内各的目的,但是是一种弱联系方式

2、注册消息的模式

上篇给出了注册的方法,但是注册可以有很多种方式,最常见的就是命名方法调用和Lambda表达式调用的方式:

2.1、基本的命名方法注册

// 使用命名方法进行注册
  Messenger.Default.Register<String>(this, HandleMessage);

  //卸载当前(this)对象注册的所有MVVMLight消息
  this.Unloaded += (sender, e) => Messenger.Default.Unregister(this);


  private void HandleMessage(String msg)
  {
    //Todo
  }

 2.2、使用 Lambda 注册

Messenger.Default.Register<String>(this, message => {
                // Todo 
                  
  }); 
  //卸载当前(this)对象注册的所有MVVMLight消息
  this.Unloaded += (sender, e) => Messenger.Default.Unregister(this);

参考博客:https://www.cnblogs.com/wzh2010/p/6689423.html

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值