我想在WPF中通知绑定系统集合项目的更改,以便每当集合中的项目发生更改时,通过IDataErrorInfo进行验证都会被重新评估。 我有一个自定义列表类型实现INotifyCollectionChanged(并正常工作)。但不知怎的,验证逻辑从未被调用,因为(或至少我假设)此通知未到达正确的位置。这种情况甚至可能吗?我错过了什么?
[编辑]
所以基本上“架构”如下:
RegisterDataValidator(() => People, () => (People.Count == 0) ? "At least one person must be specified" : null);
基类的索引器检查已注册的验证器并返回它返回的值。
SmartBindingList<T> where T: INotifyPropertyChange
,它基本上是一个列表,当项目被添加到它时,注册项目的PropertyChangedEvent并通过在类本身上触发CollectionChanged事件来对这些事件作出反应: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)行上运行时,验证方面没有任何反应。它应该正确连接,因为当我向集合添加一些东西时,它完美地工作。我错过了什么?
答案 0 :(得分:1)
在没有示例代码的情况下,这有点刺痛,但尝试针对已更改的属性提高OnPropertyChanged通知。这应该导致重新评估验证。