繁体   English   中英

ViewModel 中的 WPF 命令和异常

[英]WPF Command and exception in ViewModel

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

如何捕获这些异常的最佳实践是什么? 显示一个MessageBox就足够了,但我不想在ViewModel中这样做(这不是正确的方法)。

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

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

2 - 无论如何,如果您想坚持这种方法(我会将其定性为极端主义 MVVM - 呵呵 -),您可以:

  • 使用验证器(您听说过Binding.ValidationRules吗?如果没有,这篇文章应该对您有用)以确保输入的数据不会创建Exception
  • 如果发生Exception ,请定义特定的返回值,即。 Trigger ,如果您碰巧输入了 catch,您将返回一个特定的错误值,UI 会将其视为错误(例如,如果此特定错误值已回来)

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

干杯!

为什么你认为它不是显示消息框的正确方式? 视图模型单元测试的原因? 如果那是您的问题,只需编写一个您在 vm 中使用的 IMessageBoxService。

这篇文章展示了如何创建对话服务。 所以你必须稍微改进一下才能得到你想要的messageboxservice。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM