MvvM-Light v3取消注册有问题吗?
我正在注册这样的:
Messenger.Default.Register<DialogResponse>(this,
MessageTypesUI.YesNoQueryResponse,
AnswerResponse);
Run Code Online (Sandbox Code Playgroud)
然后在"AnswerResponse"
Messenger.Default.Unregister<DialogResponse>(MessageTypesUI.YesNoQueryResponse);
Run Code Online (Sandbox Code Playgroud)
两个方法都执行,并且调用AnswerResponse,但第二次调用它两次,第三次调用三次,等等.
它就像我的"取消注册"被忽略一样.
我用Unregister()和普通的Unregister()尝试了它
V4的发行说明中有一些内容让我怀疑版本3取消注册有问题...
您应该修改对取消注册的调用以传入收件人对象,而不是消息类型:
Messenger.Default.Unregister<DialogResponse>(this);
Run Code Online (Sandbox Code Playgroud)
如果您查看Messenger 的MVVM Light代码,则所有取消注册操作都将使用收件人 - 因为内部收件人用于标识将删除哪些邮件处理程序.最基本的方法是Unregister(recipient)取消注册给定收件人的所有操作.所有其他参数允许更细粒度的方法.
如果您有多个操作处理相同的消息类型,并且您只想取消注册其中一个,则可以使用
Messenger.Unregister<DialogMessage>(recipient, action);
Run Code Online (Sandbox Code Playgroud)
仅删除其中一个操作.
编辑
针对V. 4的MVVM Light发行说明表明对Messenger的以下更改:
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |