2011-08-02 25 views
1

MvvM-Light v3取消注册有问题吗?mvvm light v3取消注册是否正常工作?

我注册这样的:

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

然后在“AnswerResponse”

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

这两种方法执行,并AnswerResponse被调用,但第二次它被称为两次,第三次三次等

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

我注销()和朴实的注销()尝试了两种

有东西在V4让我怀疑是版本3注销问题的发布说明...

回答

6

你应该修改调用注销收件人对象传递,而不是信息类型:

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

如果你看一下MVVM Light code的信使的所有注销操作使用收件人 - 作为内部收件人是用于IDENT确定哪些消息处理程序将被删除。最基本的方法是Unregister(recipient),它可以取消注册给定收件人的所有操作。所有附加参数都允许使用更细粒度的方法。

如果你有多个动作处理相同的消息类型,你想只有一个注销您可以使用

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

,只除去行动之一。

编辑

的MVVM光发行说明V. 4指示以下更改使者:其中加入

  1. 缺少方法。 IMessenger界面。
  2. 添加了允许使用令牌进行过滤的附加Unregister方法。
  3. Messenger.CleanupList方法是线程安全的。
+0

非常感谢!它在半夜来到我身边:Messenger如何知道我是谁?但我非常感谢这一确认。应该更接近IntelliSense。 (duh) –

+2

仍然会很高兴接受答案... :-) – AxelEckenberger

+1

@Obalix,是的,这是否是正确的答案,无论OP是否认为它自己。 –