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