我有一个 WPF 应用程序,我一直在尝试以 MVVM 样式编写。如果抛出异常(例如打开文档时),我想显示一个 MessageBox。很容易做到,但我的代码感觉不太对劲,因为 MessageBox.Show 调用在 ModelView 中。我认为那种东西应该存在于视图中,但我不应该将代码放在视图中。
所以这个问题真的可以归结为在 MVVM 中显示 MessageBox 的建议方法是什么?
我有一个 WPF 应用程序,我一直在尝试以 MVVM 样式编写。如果抛出异常(例如打开文档时),我想显示一个 MessageBox。很容易做到,但我的代码感觉不太对劲,因为 MessageBox.Show 调用在 ModelView 中。我认为那种东西应该存在于视图中,但我不应该将代码放在视图中。
所以这个问题真的可以归结为在 MVVM 中显示 MessageBox 的建议方法是什么?
使用服务:
public void SomeMethodInYourViewModel()
{
try
{
DoSomethingDangerous();
}
catch (Exception ex)
{
ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
}
}
您现在已经将您的虚拟机与消息的呈现分离。您甚至可能决定根本不使用标准(丑陋的)消息框,这不会影响您的虚拟机。
查看 Josh Smith 在Codeplex上出色的 MVVM 基础。具体来说,看一下 Messenger 类,这是一种在不需要相互了解的各种 ViewModel 对象之间传递消息的轻量级方式。
另外,我不相信“视图中没有代码”有一个硬性规定,尽管如果可能的话最好避免......请记住,您的 XAML 只是用声明性语法编写的 .net 代码; 代码隐藏只是 C# 或 VB.net 的补充(如果绝对必要!)
您可能还想在您的 View 可以绑定到的 ViewModel 类上放置一个 ErrorMessage 字符串属性。