2011-08-02 53 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是否認爲它自己。 –