MVVM Light学习笔记:Messenger
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVVM Light学习笔记:Messenger相关的知识,希望对你有一定的参考价值。
MVVLight中一个重要的东西,Messageer.
(一)Messenger的基本组成
Messenger类用于应用程序的通信,接受者只能接受注册的消息类型,另外目标类型可以被指定,用Send<TMessage, TTarget>(TMessage message)实现,在这种情况下信息只能被传递如果接受者类型和目标参数类型匹配,message可以是任何简单或者复杂的对象,你可以用特定的消息类型或者创建你自己的类型继承自他们
(1)MessageBase:简单的消息类,携带可选的信息关于消息发布者的
(2)GenericMessage<T>:范型消息
(3)NotificationMessage: 用于发送一个string类型通知给接受者
(4)NotificationMessage<T>:和上面一样是一个,且具有泛型功能。
(5)NotificationMessage:向接受者发送一个通知,允许接受者向发送者回传消息
(6)NotificationMessageAction<T>:NotificationMessage的泛型方式
(7)DialogMessage:发送者(通常是View)显示对话,并且传递调用者得回传结果(用于回调),接受者可以选择怎样显示对话框,可以使是标准的MessageBox也可也是自定义弹出窗口
(8)PropertyChangedMessage<T>:用于广播一个属性的改变在发送者里,和PropertyChanged事件有完全箱体内各的目的,但是是一种弱联系方式
(二)Messenger的案例演示。
下面用一个简单的列子讲解下Messenger的用法,在实例中,有两个窗口,一个是显示产品详细信息MainWindow.xaml,另一个是EditDetailView.xaml,通过选择MainWindow窗口中的任意产品,能在EditDetailView窗口显示,如果在EiditDetailView中修改产品的数量,可以将修改的结果立即呈现到MainWindow中。
原理浅析:发布者通过Messenger.Default.Send<T>发布某个类型消息,而接受者通过 Messenger.Default.Register<T>注册相应的消息类型,从而实现接受消息
主要代码如下:
发送者,代码片段
SelectedProductCommand = new RelayCommand(() =>
{
if (Products.CurrentItem != null)
{
//获取当前选中列
Product selectedProduct = (Product)Products.CurrentItem;
//消息的发送
//(1)如果我们只需要接受者接受消息,用下面的方式就可以了
//发布消息 另一种写法Messenger.Default.Send<Product>(selectedProduct);
Messenger.Default.Send(selectedProduct);
//(2)如果我们需要接受者返回消息,还需要下面的代码
//发布消息,接受者可以通过NotificationMessageAction<Product> 的实例lastProduct的Excute()方法返回消息到接受者
Messenger.Default.Send(new NotificationMessageAction<Product>("当前选择的产品是:" + selectedProduct.Description, FromEditViewModelCallBack));
}
}
);
接受者,主要代码片段
public EditDetailViewModel()
{
//消息的接受
//(1)如果我们只是接受消息,不返回消息,只需要下面的代码
Messenger.Default.Register<Product>(this, m => FromMainWindowProduct= m);
//(2)如果我们还需要向发送者返回消息,我们需要将如下代码,获取 NotificationMessageAction<Product> lastProduct实例
Messenger.Default.Register<NotificationMessageAction<Product>>
(this, m =>
{
ShowMessage= m.Notification;
lastProduct = m;
}
);
SaveCommand = new RelayCommand(() =>
{
//处理来至发送者的消息,并返回消息到发送者
lastProduct.Execute(product);
}
);
}
以上是关于MVVM Light学习笔记:Messenger的主要内容,如果未能解决你的问题,请参考以下文章
这是使用 MVVM Light Messenger 类的正确方法吗