Messenger是MVVMLight Toolkit提供的一个类。用来通信。
Messenger.Default.Register<Customer>(this, "ChildWindow", AddCustomer);
要使用Messenger来传递消息,首先要注册一个消息。有一个标识Token用来区别标记不同的消息,如上段代码中“ChildWindow”。this表示接收器。<Customer>是消息的类型(一会儿我们传给AddCustomer的参数类型)。
我们的消息可以是任何类型,当然也可以是集合类型也可以是简单的boolean型
Messenger.Default.Register
// // 摘要:注册一个消息接收器,当消息发送,接收到后就执行Action // 参数: // recipient: // 消息接收器. // // token: // 就像一个频道, // recipient注册的token和sender发送的Token一样时,消息被接受 // action: // 消息发送后会执行的操作. // // 类型参数: // TMessage: // 发送的消息、会被执行的操作参数的类型. public virtual void Register<TMessage>(object recipient, object token, Action<TMessage> action);
我们通过View中的一个OKButton来绑定一个Command OKButtonCommand 来发送这个消息。意思是妈妈叫你来AddCustomer了。
public RelayCommand<Customer> OKButtonCommand { get; private set; } private void OKButtonClick(Customer param) { /* * 发送一个 Customer 信息 * Token 为 ChildWindow 只有具有相同 Token 接收者都会接收到该信息 */ // 注册一个接收者 Token 为 ChildWindow Messenger.Default.Send<Customer>(param, "ChildWindow"); }
我们还要定义一个AddCustomer方法来让this接收到消息以后去执行。
AddCustomer
不要忘了在CleanUp里把消息注销掉。不然会有可能下次妈妈叫AddCustomer的时候多加。注销请用
Messenger.Default.Unregister<Customer>(this, "ChildWindow", AddCustomer);