Messenger:中文解释为信使的意思,顾名思义,在MvvmLight中,它的主要作用是用于View和ViewModel、ViewModel和ViewModel之间的通信,MVVMLight Messenger 旨在通过简单的设计模式来精简此场景:任何对象都可以是接收端;任何对象都可以是发送端;任何对象都可以是消息。
Massenger在View和ViewModel之间通信:
在View中注册消息 Messenger.Default.Register<string>(this, "ShowMessageToken", ShowSubWindow),相当于订阅服务。
消息标志token:ShowMessageToken,用于标识只阅读某个或者某些Sender发送的消息,并执行相应的处理,所以Sender那边的token要保持一致
消息处理Action:ShowSubWindow,参数类型为string,用来执行接收到消息后的后续工作。
在ViewModel中发送消息 Messenger.Default.Send("Message","ShowMessageToken"),相当于发布事件。
传递的消息参数为Message,消息token为ShowMessageToken,需要与接收者注册的消息的Token一致。
Massenger Demo代码如下:
public class ViewModel:ViewModelBase
{
public ViewModel()
{
//注册
Messenger.Default.Register<string>(this, "AddItemToken", AddItem);
}
//接收消息
private void AddItem(string msg)
{
MessageBox.Show(msg + " added completed!");
}
//发送消息
public RelayCommand<string> ShowMessage => new RelayCommand<string>(_ShowMessage);
private void _ShowMessage(string param)
{
Messenger.Default.Send(param,"ShowSubWindowToken");
}
}