代码之家  ›  专栏  ›  技术社区  ›  Jake Pearson

MVVM异常处理

  •  9
  • Jake Pearson  · 技术社区  · 15 年前

    我有一个WPF应用程序,我一直在尝试用MVVM样式编写。如果抛出异常(如打开文档时),我希望显示一个消息框。很容易,但我的代码感觉不太正确,因为messagebox.show调用在ModelView中。我以为这类东西应该存在于视图中,但我不应该将代码放在视图中。

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

    3 回复  |  直到 13 年前
        1
  •  17
  •   Tim Cooper    13 年前

    使用服务:

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

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

        2
  •  9
  •   kiwipom    15 年前

    看看乔什史密斯的优秀MVVM基金会 Codeplex . 具体来说,看看messenger类,它是一种轻量级的方法,可以在不需要相互了解的各种ViewModel对象之间传递消息。

    另外,我不相信“视图中没有代码”有一个硬性和快速的规则,尽管最好尽可能避免…记住,您的XAML只是用声明性语法编写的.NET代码;后面的代码只是C或VB.NET来补充它(如果绝对必要!)

        3
  •  2
  •   Wayne Bloss    14 年前

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