IDataErrorInfo验证的集合更新通知

时间:2012-03-12 15:15:45

标签: wpf binding user-controls idataerrorinfo

我想在WPF中通知绑定系统集合项目的更改,以便每当集合中的项目发生更改时,通过IDataErrorInfo进行验证都会被重新评估。 我有一个自定义列表类型实现INotifyCollectionChanged(并正常工作)。但不知怎的,验证逻辑从未被调用,因为(或至少我假设)此通知未到达正确的位置。这种情况甚至可能吗?我错过了什么?

[编辑]

所以基本上“架构”如下:

  1. MVVM基类实现IDataErrorInfo,您可以在派生的MVVM类中注册带有lambdas的DataValidators,例如:
  2. RegisterDataValidator(() => People, () => (People.Count == 0) ? "At least one person must be specified" : null);
    

    基类的索引器检查已注册的验证器并返回它返回的值。

    1. 我有一个SmartBindingList<T> where T: INotifyPropertyChange,它基本上是一个列表,当项目被添加到它时,注册项目的PropertyChangedEvent并通过在类本身上触发CollectionChanged事件来对这些事件作出反应:
    2. private void OnSubPropertyChanged (object sender, PropertyChangedEventArgs e)
          {
              if (sender is T1)
              {
                  if (CollectionChanged != null)
                  {
                      NotifyCollectionChangedEventArgs eventArgs = new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, sender, sender);
                      CollectionChanged(this, eventArgs);
                  }
                  if (PropertyChanged != null)
                  {
                      PropertyChanged(this, new PropertyChangedEventArgs(myPropertyName));
                  }
              }
          }
      

      所以这一切都很好用,但是当代码在CollectionChanged(this,eventArgs)行上运行时,验证方面没有任何反应。它应该正确连接,因为当我向集合添加一些东西时,它完美地工作。我错过了什么?

1 个答案:

答案 0 :(得分:1)

在没有示例代码的情况下,这有点刺痛,但尝试针对已更改的属性提高OnPropertyChanged通知。这应该导致重新评估验证。