MVVMexception处理

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

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

使用服务:

public void SomeMethodInYourViewModel() { try { DoSomethingDangerous(); } catch (Exception ex) { ServiceLocator.Resolve().ShowMessage(ex.Message); } } 

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

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

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

您可能还想在ViewModel类上放置一个ErrorMessage字符串属性,View可以绑定到该属性。