ViewModel中的WPF命令和异常

Car*_*s00 6 .net c# wpf binding

按钮有一个Command绑定ViewModel(它Save在ViewModel中运行一些方法).方法Save可能会失败并抛出异常.

如何捕获这些异常的最佳做法是什么?只需要显示一个,MessageBox但我不想这样做ViewModel(这不是正确的方法).

Dam*_*cus 8

1 - 我不相信这是"不正确的方式".

具有Exception在升高ViewModel通常是的一部分ViewModel的逻辑.因此,表现出MessageBox不会有"坏方法".请记住,MVVM的实际目标不是消除所有代码隐藏,而是实际上明确区分UI逻辑和业务逻辑.处理业务对象时会发生异常 - 您可以在中处理它ViewModel

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

  • 使用验证器(您是否听说过Binding.ValidationRules?如果没有,本文对您有用),以确保输入的数据不会创建Exception
  • 如果Exception发生,则定义特定的返回值,即.try-catch,如果您碰巧输入catch,您将返回一个特定的Error值,该值将被UI视为错误(例如Trigger,如果此特定错误值具有以下值,您可以使用a 为该字段着色为红色已退回)

无论如何,我认为有很多人想要通过消除所有可能的代码隐藏并引入复杂模式(例如附加行为......)来应用"极端主义MVVM",只是为了遵循一个实际上是无意义的要求.我的看法.我不会说我是完全正确的,但我更喜欢看MVVM作为一种模式,它将简化我的编码方式,而不是一种模式,它会给我带来如此多的基本事物的痛苦(例如我见过人们实现AttachedBehaviors对于一个简单的DoubleClick操作.我个人添加了一个EventHandler,在DoubleClick事件被触发时向我的MVVM添加了一个DoubleClick命令.对于另一个方法,针对100行类+ XAML代码的1行代码,选择你的一方.我相信简单的问题应该有一个简单的解决方案)

干杯!

  • 如果有消息框显示,您如何自动测试您的“ViewModel”? (4认同)

bli*_*eis 8

为什么你认为它不是显示消息框的正确方法?viewmodel的单元测试原因?如果这就是你的问题,只需写一个你在你的虚拟机中使用的IMessageBoxService.

这篇文章展示了如何创建对话服务.所以你必须稍微改进它以获得你想要的messageboxservice.