2011-10-31 58 views
1

从我的阅读和尝试理解和实现MVVM和验证,我需要一些帮助下面的情况。绑定验证更新错误视图

查看 - 用户界面(预期)

模式 - 基于数据表,并通过OnColumnChanging,对列逐列基础的验证要求测试(这部分作品没有问题)

ViewModel - 将连接模型粘贴到视图上,这也起作用。

对于每个文本框控件,我分别绑定双向数据表,当前行(仍然没有问题),并按预期显示数据。这些标志包括:NotifyOnTargetUpdated,ValidatesOnDataErrors,ValidatesOnExceptions和NotifyOnValidationError都设置为true。

如果我使用接口并输入了无效值,它会正确触发验证,并将红色边框放在控件上显示它失败。

现在的问题。我开始我的表单,然后单击“添加”按钮(新记录,空值),现在启用了用于编辑内容的文本框控件。点击“保存”按钮。我想要刷新所有缺少“必需”数据的控件。由于我的视图模型绑定到数据表的列,并且从我的阅读中,所有的验证都应该在视图模型中处理,我应该如何调整我的场景。

我不知道如何强制哪些控件绑定到各自的控件时,他们从来没有收到焦点。另外,从其他阅读中,为了允许进行单元测试,您应该能够在没有用户界面的假设下进行测试。因此,理论上,我可以自动创建我的viewmodel,它加载我的数据模型,添加记录,尝试保存并强制测试所有“必需”字段。

我关闭吗???离开?对此不太积极。

回答

0
  1. 验证应该在两个地方完成。一个在ModelView(用户输入验证),第二个在Model模型一致性验证,如果特定情况需要。

  2. 您已将每个文本框(TextProperty)绑定到ModelView的属性。 TextBox(我假设)有一个依赖属性,它可以让你指定以太网来发信号错误UI或不。

,你所要做的,恕我直言,immidiately内Add事件处理程序中设置默认值绑定ModelView对象。将会发生的情况是:对于包括所需控制在内的每个控制,将通过DataBinding进行设置,通过UI显示默认值。对于必填字段,默认值可能不是有效字段,因此所需字段将立即以Error信号出现,向用户发送有关必填字段的信息。

+0

正如我的问题所述。视图模型有一个子类数据表的实例,它有其验证THERE而不是视图模型本身。文本框绑定到数据表的列...几乎就像通过视图模型的一个步骤(即:路径将从视图到ViewModel - > MyDataTable - >(Columns)MyDataColumn ...所以没有直接的INotifyPropertyChange在视图模型本身...所以我怎么会从数据表中触发它不知道它的列是绑定的(即使用反射???) – DRapp

+0

@DRapp:这实际上是第一点,你验证用户输入模型的一面,在我看来,在这种情况下,可以在ModelView方面更容易完成。不是UIError-> ModelViewProperty-> BindedModel-> Validation-> Error-> ModelView-> UI,而是UIError-> ModelView- > Validation->错误 - > UI。 – Tigran