我们正在尝试在mvvm中解决验证问题,即在业务逻辑或模型中进行验证。
我已经在我们的业务逻辑中实现了异常类型的验证-简化的图表可以在这里找到:
如果我们有很多相互独立的输入,那么没有问题,异常会被抛出,文本框会将其边框标记为红色以表示每个错误的输入。然而,当我们有依赖值时,我们就有麻烦了。
例如:
- 模型中的Value1和Value2不能相同,因此我们在每个值中都有一个验证函数,查找相等的值并在发生异常时抛出异常 - 现在,如果我们将Value1设置为0并将Value2设置为1,一切都很好 - 在GUI中将Value1设置为1->这个值被标记为红色,因为其他值的验证没有触发,因此GUI中的Value2没有标记为错误 - 在GUI中将Value2设置为2,现在我们已经达到了有效状态,但只有Value2得到了验证,所以Value1仍然被标记为错误
是否有一种常见的模式来解决这个问题?我们不想在两个文本框之间引入GUI中的依赖关系,因为这个逻辑应该只存在于业务逻辑层中。
除了实现异常验证之外,还可以实现IDataErrorInfo接口,但问题仍然存在,没有办法强制依赖值重新验证其值,至少我看不到:)
感谢任何帮助。
![alt text](https://istack.dev59.com/8f6ms.gif)
- 模型中的Value1和Value2不能相同,因此我们在每个值中都有一个验证函数,查找相等的值并在发生异常时抛出异常 - 现在,如果我们将Value1设置为0并将Value2设置为1,一切都很好 - 在GUI中将Value1设置为1->这个值被标记为红色,因为其他值的验证没有触发,因此GUI中的Value2没有标记为错误 - 在GUI中将Value2设置为2,现在我们已经达到了有效状态,但只有Value2得到了验证,所以Value1仍然被标记为错误
是否有一种常见的模式来解决这个问题?我们不想在两个文本框之间引入GUI中的依赖关系,因为这个逻辑应该只存在于业务逻辑层中。
除了实现异常验证之外,还可以实现IDataErrorInfo接口,但问题仍然存在,没有办法强制依赖值重新验证其值,至少我看不到:)
感谢任何帮助。
干杯,manni
[清理,删除不必要的步骤]
2010年11月15日 - 第二部分
好的,我们在这里进行了大量的思考,我们将使用业务逻辑层。以下是我们当前计划的配置:
(这张图片在这里有点小,请在单独的窗口中打开以显示完整大小)
除了如何通知不同编辑器的所有视图模型/模型克隆数据模型下的业务逻辑发生更改之外,其他一切都比较清晰。一种方法是在创建它们的业务逻辑中跟踪克隆的模型。当使用业务逻辑commit()更改数据模型时,所有其他已注册的模型克隆都可以被通知到更改并进一步传播它们。或者,业务逻辑可以发布一个事件,所有视图模型都订阅该事件,以便他们也可以获得更改-有人能给我一个提示哪个更好吗?
再次感谢您的帮助,对不起我很困惑;)