MvvM-Light v3取消注册有问题吗?
我正在注册:
Messenger.Default.Register<DialogResponse>(this,
MessageTypesUI.YesNoQueryResponse,
AnswerResponse);
然后在“AnswerResponse”中
Messenger.Default.Unregister<DialogResponse>(MessageTypesUI.YesNoQueryResponse);
两个方法都执行,并且调用了AnswerResponse,但是第二次调用它两次,第三次调用三次,等等。
好像我的“取消注册”被忽略了。
我尝试使用Unregister()和普通的Unregister()
V4的发行说明中有一些内容让我怀疑版本3取消注册有问题...
答案 0 :(得分:6)
您应该修改对取消注册的调用以传入收件人对象,而不是消息类型:
Messenger.Default.Unregister<DialogResponse>(this);
如果您查看信使的MVVM Light code,则所有取消注册操作都会使用收件人 - 因为内部收件人用于识别将删除哪些邮件处理程序。最基本的方法是Unregister(recipient)
,它取消注册给定收件人的所有操作。所有其他参数都允许更精细的方法。
如果您有多个操作处理相同的消息类型,并且您只想取消注册其中一个,则可以使用
Messenger.Unregister<DialogMessage>(recipient, action);
仅删除其中一项操作。
修改强>
MV的MVVM Light发行说明表明了对Messenger的以下更改: