2013-03-14 47 views
3

我在我的應用程序mvvm light toolkit中使用。我想使用我的viewmodels中的消息框。所以:我可以在App.xaml.cs中註冊Messenger.Default.Register()嗎?它必須註冊所有視圖模型。我不想在每個ViewModel中註冊它。 我可以在Deactivated或Closing事件中撥打Messenger.Default.Unregister()嗎?ViewModel中的MessageBox

感謝

回答

2

的MVVM和消息框一個可行的方法是一個簡單的事件機制:

public class MessageBoxDisplayEventArgs : EventArgs 
{ 
    public string Title { get; set; } 

    // Other properties here... 
} 
... 
public class ViewModelBase 
{ 
    public event EventHandler<MessageBoxDisplayEventArgs> MessageBoxDisplayRequested; 

    protected void OnMessageBoxDisplayRequest(string title) 
    { 
     if (this.MessageBoxDisplayRequested != null) 
     { 
      this.MessageBoxDisplayRequested(
       this, 
       new MessageBoxDisplayEventArgs 
       { 
        Title = title 
       }); 
     } 
    } 
} 
... 
public class YourViewModel : ViewModelBase 
{ 
    private void SomeMethod() 
    { 
     this.OnMessageBoxDisplayRequest("hello world"); 
    } 
} 
... 
public class YourView 
{ 
    public YourView() 
    { 
     var vm = new YourViewModel(); 
     this.Datacontext = vm; 

     vm.MessageBoxDisplayRequested += (sender, e) => 
     { 
      // UI logic here 
      //MessageBox.Show(e.Title); 
     }; 
    } 
}