2012-12-10 109 views
1

關於使用mvvmlight v4的Messenger,我有一個問題: 我們應該在哪裏放置Messenger的註冊表? 我找到了一些例子,他們把它們放在構造函數中。但是我遇到了一個問題,無論何時我們創建一個視圖實例,這個消息都會再次被註冊 - >消息處理器將被調用爲相同數量的註冊消息。MVVM-Light:我們應該在哪裏放置Messenger的註冊表

如:我喜歡註冊的消息:

Messenger.Default.Register<NotificationMessage>(this, (nm) => 
    { 
     if (nm.Sender == this.DataContext) 
     { 
      if (nm.Notification == "OnNext") 
      { 
       this.Hide(); 
       Form2 f2= new Form2(); 
       f2.Show(); 
      } 
     } 
    } 

- >每次,第一時間用戶短聲下一步,出現1種形式,但是,當用戶再次點擊下一步,此時,2條消息被登記&使2種形式出現。 我該如何處理這種情況?

在此先感謝您的幫助。

+0

很幸運,我找到解決這個問題的辦法:那就是我註銷消息之前,我註冊。像:Messenger.Default.Unregister (this);.無論如何,我仍在等待您的意見,以確保我做到了正確的方式。 – kidgu

回答

2

該視圖的構造函數似乎是一個放置Messenger的註冊的好地方。你可以把註銷的Cleanup()功能(你必須實現ICleanup接口)

public class MainWindow : ICleanup 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     Messenger.Default.Register(recipient, action); 
    } 

    public void Cleanup() 
    { 
     Messenger.Default.Unregister(recipient, action); 
    } 
} 
+0

嗨,我確實把Unregister放在了視圖的解構器中,它似乎不是很好&我遇到了麻煩(http://stackoverflow.com/questions/13912718/unregister-message-in-destructor-make-error-處理-IS-未初始化/ 13913406#13913406)。感謝您的回覆! – kidgu

+0

我試過你的解決方案,但沒有奏效。任何方式? –

相關問題