验证应用程序块5和WPF视图模型

时间:2011-05-05 07:58:38

标签: validation enterprise-library viewmodel

我的问题非常基础,与使用企业库验证应用程序块5.0验证视图模型中的对象有关。

当用户输入无效数据时,如果UI显示控件的错误模板,则控件绑定的视图模型中的属性不会更新。

这是一个问题,因为我想调用此代码

ValidatorFactory factory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
myValidator = factory.CreateValidator<Customer>();

ValidationResults results = myValidator.Validate(this.CustomerProperty);
if (!results.IsValid)
{
    // etc
}

在视图模型中的我的保存按钮命令中检查数据是否有效。

我遇到的问题的例子。

e.g。 如果我有一个文本框绑定到vm中的字符串属性,并带有字符串长度验证器(最小长度为1,最大值为10),则可能发生以下情况;

  1. 输入'ABC'的文字。 UI不显示错误。 查看模型属性已更新为“ABC”。
  2. 删除文本框的内容(现在无效)。 UI现在显示错误(好)。 但是视图模型属性现在与UI不同步。视图模型中的属性仍设置为ABC。
  3. 由于视图模型数据仍然有效,保存验证仍会通过。
  4. 我该怎么做?

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我最终删除了validationRule(根据EntLib 5动手实验室文档中的示例)并在我的Customer类中实现了IDataErrorInfo。

然后我改变了我的XAML并在我的文本框中添加了

ValidatesOnDataErrors=True

然后按照我的预期验证我的对象。即无效数据传播到视图模型属性,然后我可以在我的保存命令上验证。