9

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

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

4

3 回答 3

17

使用服务:

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

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

于 2009-08-26T18:41:03.850 回答
9

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

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

于 2009-08-27T02:46:24.397 回答
2

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

于 2010-10-09T19:14:09.953 回答