mvvm light v3取消注册是否正常工作?

时间:2011-08-02 21:59:01

标签: mvvm-light

MvvM-Light v3取消注册有问题吗?

我正在注册:

 Messenger.Default.Register<DialogResponse>(this,
                                            MessageTypesUI.YesNoQueryResponse,
                                            AnswerResponse);

然后在“AnswerResponse”中

 Messenger.Default.Unregister<DialogResponse>(MessageTypesUI.YesNoQueryResponse);

两个方法都执行,并且调用了AnswerResponse,但是第二次调用它两次,第三次调用三次,等等。

好像我的“取消注册”被忽略了。

我尝试使用Unregister()和普通的Unregister()

V4的发行说明中有一些内容让我怀疑版本3取消注册有问题...

1 个答案:

答案 0 :(得分:6)

您应该修改对取消注册的调用以传入收件人对象,而不是消息类型:

Messenger.Default.Unregister<DialogResponse>(this);

如果您查看信使的MVVM Light code,则所有取消注册操作都会使用收件人 - 因为内部收件人用于识别将删除哪些邮件处理程序。最基本的方法是Unregister(recipient),它取消注册给定收件人的所有操作。所有其他参数都允许更精细的方法。

如果您有多个操作处理相同的消息类型,并且您只想取消注册其中一个,则可以使用

Messenger.Unregister<DialogMessage>(recipient, action);

仅删除其中一项操作。

修改

MV的MVVM Light发行说明表明了对Messenger的以下更改:

  1. 缺少添加到的方法。 IMessenger界面。
  2. 添加了允许使用令牌进行过滤的其他取消注册方法。
  3. 使Messenger.CleanupList方法成为线程安全的。