C# ViewModel中的WPF命令和异常

C# ViewModel中的WPF命令和异常,c#,.net,wpf,binding,C#,.net,Wpf,Binding,按钮有一个命令绑定到ViewModel(它在ViewModel中运行一些Save方法)。方法Save可能失败并引发异常 如何捕获这些异常的最佳实践是什么?显示一个消息框就足够了,但我不想在视图模型中这样做(这不是正确的方式)。1-我不相信这是“不正确的方式” 在ViewModel中引发异常通常是ViewModel逻辑的一部分。因此,显示MessageBox不会有“坏方法”。 请记住,MVVM的实际目标不是消除所有代码落后,而是明确区分UI逻辑和业务逻辑。处理业务对象时会发生异常——您可以在Vie

按钮有一个
命令
绑定到
ViewModel
(它在ViewModel中运行一些
Save
方法)。方法
Save
可能失败并引发异常

如何捕获这些异常的最佳实践是什么?显示一个
消息框就足够了,但我不想在
视图模型中这样做(这不是正确的方式)。

1-我不相信这是“不正确的方式”

ViewModel
中引发
异常
通常是
ViewModel
逻辑的一部分。因此,显示
MessageBox
不会有“坏方法”。 请记住,MVVM的实际目标不是消除所有代码落后,而是明确区分UI逻辑和业务逻辑。处理业务对象时会发生异常——您可以在
ViewModel

2-无论如何,如果你想坚持这种方法(我认为它是一种极端的MVVM-呵呵-),你可以:

  • 使用验证器(您是否听说过
    绑定.ValidationRules
    ?如果没有,请确保输入的数据不会创建
    异常
  • 如果发生
    异常
    ,请定义一个特定的返回值,即try catch,如果您碰巧在catch中输入,您将返回一个特定的错误值,该错误值将被UI视为错误(例如,如果已返回此特定错误值,您可以使用
    触发器
    将字段涂成红色)
无论如何,我认为有很多人想通过消除所有可能的代码并引入复杂模式(例如附加行为…)来应用“极端的MVVM”,只是为了遵循一个在我看来实际上是胡说八道的要求。我不会说我是绝对正确的,但我更愿意把MVVM看作是一种模式,它可以简化我的编码方式,而不是一种模式,它会给我带来很多基本的痛苦(例如,我见过有人为一个简单的双击操作实现AttachedBehaviors。我个人在触发双击事件时向我的MVVM中添加了一个触发双击命令的EventHandler。1行代码与100行类+XAML代码相比,对于另一种方法,请选择您的立场。我相信一个简单的问题应该有一个si(简单解决方案)


干杯!

为什么您认为这不是显示messagebox的正确方式?viewmodel单元测试的原因?如果这是您的问题,请编写一个您在vm中使用的IMessageBoxService


这显示了如何创建对话框服务。因此,您必须对其进行一些改进,才能获得所需的messageboxservice。

如果显示消息框,如何自动测试您的
ViewModel