【问题标题】:Validation application block 5 and WPF view model验证应用程序块 5 和 WPF 视图模型
【发布时间】:2011-05-05 07:58:37
【问题描述】:

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

似乎当用户输入无效数据时,当 UI 显示控件的错误模板时,控件绑定到的视图模型中的属性没有得到更新。

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

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

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

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

我遇到的问题示例。

例如 如果我有一个文本框绑定到带有字符串长度验证器(最小长度 1,最大 10)的 vm 中的字符串属性,那么可能会发生以下情况;

  1. 输入“ABC”文本。 UI 不显示错误。 查看模型属性已更新为“ABC”。
  2. 删除文本框的内容(因此现在无效)。 UI 现在显示错误(良好)。 但是视图模型属性现在与 UI 不同步。视图模型中的属性仍设置为 ABC。
  3. 保存验证仍将通过,因为视图模型数据仍然有效。

我应该怎么做?

【问题讨论】:

    标签: validation enterprise-library viewmodel


    【解决方案1】:

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

    然后我更改了我的 XAML 并在我的文本框绑定中添加了

    ValidatesOnDataErrors=True
    

    这会像我期望的那样验证我的对象。即无效数据被传播到视图模型属性,然后我可以在我的保存命令上进行验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 2017-08-17
      • 2021-07-09
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多