MVVM异常处理

Jak*_*son 9 c# wpf messagebox mvvm

我有一个WPF应用程序,我一直试图用MVVM样式编写.如果抛出异常(比如打开文档时),我想显示一个MessageBox.容易做,但我的代码感觉不太正确,因为MessageBox.Show调用在ModelView中.我认为那种东西应该存在于View中,但我不应该把代码放在View中.

那么问题真的可以归结为在MVVM中显示MessageBox的建议方式是什么?

Ken*_*art 17

使用服务:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

您现在已经将VM与消息的呈现分离.您甚至可能决定不使用标准(丑陋)消息框,这不会影响您的VM.


kiw*_*pom 9

看看Josh Smith在Codeplex上出色的MVVM基金会.具体来说,看看Messenger类,这是一种在不需要彼此了解的各种ViewModel对象之间传递消息的轻量级方法.

另外,我不认为"视图中没有代码"有一条严格的规则,尽管如果可能的话最好避免使用...请记住,你的XAML只是用声明性语法编写的.net代码; 代码隐藏只是C#或VB.net来补充(如果绝对必要!)