MVVM Light学习笔记(五):消息注册和消息注销
在MvvmLight中要注意的一个地方的就是在某些地方要用到消息注销Unregister<T>。否则注册后的消息处理方法会被执行多次(至少是3次)这里把这个问题总结如下:
(一)场景:
如果你是在MainPage中New一个ReceiverSecond消息接受者,然后再发送消息,就像下面的做法:
private void Button_Click(object sender, RoutedEventArgs e)
{
//sp2.Children.Clear();
ReceiverSecond temp = new ReceiverSecond();
sp2.Children.Add(temp);
Messenger.Default.Send<MsgHellWord>(new MsgHellWord() { HellWord = "HellWord" });
}
那么,在ReceiverSecond接受者的ReceiverSecondModelView的消息处理方法会被执行3次,就像下面的做法:
private void OnMsgHelloWord(MsgHellWord temp)
{
i++;
ShowHellWordText = "第" + i + "个 " + temp.HellWord;
//Messenger.Default.Unregister<MsgHellWord>(this);
}
(二)解决办法:
添加Messenger.Default.Unregister<T>方法,这样就可以避免被执行多次。
(三)总结:
(1)如果Messenger.Default.Send<T>方法发送者所在也面是个固定的页面,而接受者的页面是被New处理的话,就需要用Messenger.Default.Unregister<T>来注销消息
(2)如果Messenger.Default.Register<T>方法接受者所在也面是个固定的页面,而接受者的页面是被New处理的话,就不需要用Messenger.Default.Unregister<T>来注销消息
(四)代码下载