2013-03-14 72 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); 
     }; 
    } 
}