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
?