记忆碎片---MVVMLight之Messenger

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);

 

 

posted @ 2012-05-10 15:11  过期臭豆腐  阅读(656)  评论(0)    收藏  举报