在MVVM Light中,我們可以檢查一個類是否已經註冊?即如果我調用兩次以下方法,它會註冊兩次。我只需要一次。mvvm light messenger檢查課程是否已經註冊?
Messenger.Default.Register(this,message => DisplayError(message));
這是一個註冊實例給Messenger的好地方嗎?構造函數或加載的事件處理程序?
這是一個取消註冊的好地方?
在MVVM Light中,我們可以檢查一個類是否已經註冊?即如果我調用兩次以下方法,它會註冊兩次。我只需要一次。mvvm light messenger檢查課程是否已經註冊?
Messenger.Default.Register(this,message => DisplayError(message));
這是一個註冊實例給Messenger的好地方嗎?構造函數或加載的事件處理程序?
這是一個取消註冊的好地方?
目前,沒有API來檢查實例或類是否在Messenger中註冊。你需要自己跟蹤。
我通常在構造函數中註冊,並公開在清除對象之前取消註冊的Cleanup方法。
只是想說明,現在存在於MVVMLight中。您可以使用
if(SimpleIoc.Default.IsRegistered<YourType>())
{
// Don't register again!
}
雖然是IoC容器,但不是Messenger。 – MetalMikester 2015-11-27 15:01:37
對不起,我剛纔看到你標記的Windows Phone 7,那麼你顯然做了導航應用;)所以,是的OnNavigatedTo和OnNavigatingFrom可以作爲觸發的視圖模型(頁面的DataContext的)和其他對象向Messenger註冊/取消註冊。然而,這不是一個規則,真正的答案是「取決於」。 – LBugnion 2011-03-29 22:49:02
其實,我需要一個在對話框中顯示錯誤。所以溝通來自VM來查看。所以,一般來說,如果我在OnNavigatedTo中註冊並在OnNavigatedFrom(在代碼隱藏,而不是在VM中)註銷,你認爲我會安全嗎?即它不會被解僱兩次,對吧? – Jonna 2011-03-30 00:34:33
@如果這不是一個安全的方法來做到這一點,會導致其他領域的一些根本性問題。你應該沒問題。 – 2011-03-30 14:51:52