一个任务:
有这样一个添加数据的窗口(姓氏和名字不能为空,年龄是一个适当范围内的数字,性别必须选择)
单击OK时,有必要显示有关用户所犯的所有错误的信息。
对以下内容感兴趣(是的,我知道 1 个问题 - 1 个主题):
- 在模型或视图中验证?
- 如果在模型中 - 如何显示有关错误的信息?
- 是否可以在模型中使用 MessageBox?
- 如果在视图中 - 这是否违反了模式的逻辑?
- 什么时候需要使用
IDataErrorInfo验证,什么时候不用get;set;
UPD 项目 github链接
该农场位于 2 个文件中:
作为解决所有这些问题的一种选择,我看到了一种方法:StudentWindow创建一个单独的模型,但即使是我也无法想象在其中写什么。

INotifyDataErrorInfo。(这是一个相关的答案:https ://stackoverflow.com/a/9950236/276994 。)严格来说,没有。VM 根本不应该知道错误是否显示在 MessageBox 中、状态栏中、
Popup出现错误的元素附近或其他地方,这是 View 的业务。正确组织错误输出是一个复杂的话题。这里有一个比较简单的解决方案(任意窗口打开服务)。一个在意识形态上更正确的解决方案是拥有一个全局错误显示服务,View 为其提供了自己的实现。这是一个相当复杂的话题,在一般情况下,它包括问题的解决
等等
然而,在实践中,他们(也)通常不会打扰,而是在 VM 中编写代码,例如
尽量不要这样做,知道用户不会喜欢它。
该模式的逻辑如下:当错误发生时以及它是什么时,由 VM 负责。View 负责显示它的位置和方式。因此,没有违反模式的逻辑。
INotifyDataErrorInfo。(它允许异步验证以及交叉验证:错误可能不在一个属性的值中,而是在多个属性值的无效组合中!)