添加集合更改为可观察的Colleciton,而无需知道集合类型
本文关键字:集合 类型 集合类 Colleciton 观察 添加 | 更新日期: 2023-09-27 18:36:38
我正在尝试将 CollectionChanged 事件添加到类中的任何项目。 假设我有以下内容:
public class A
{
string OneString;
string TwoString;
ObservableCollection<B> CollectionOfB;
}
public class B
{
string ThreeString;
string FourString;
string FiveString;
ObservableCollection<C> CollectionOfC;
}
public class C
{
string SixString;
string SevenString;
}
我的代码当前从类 A 开始,查看类中的每个项,该类使用 INotifyPropertyChanged 并将 PropertyChanged 事件分配给每个项,并递归向下钻取每个子类在每个级别分配 PropertyChanged 事件。
我的问题是当我尝试将 CollectionChanged 事件分配给 ObservableCollection 时。 我的代码在运行时之前不会知道 ObservableColleciton 中项目的类型。 我有以下代码:
protected virtual void RegisterSubPropertyForChangeTracking(INotifyPropertyChanged propertyObject)
{
propertyObject.PropertyChanged += new PropertyChangedEventHandler(propertyObject_PropertyChanged);
// if this propertyObject is also an ObservableCollection then add a CollectionChanged event handler
if (propertyObject.GetType().GetGenericTypeDefinition().Equals(typeof(ObservableCollection<>)))
{
((ObservableCollection<object>)propertyObject).CollectionChanged +=
new NotifyCollectionChangedEventHandler(propertyObject_CollectionChanged);
}
}
当我尝试添加 CollectionChanged 事件处理程序时,出现以下错误:
{"Unable to cast object of type 'System.Collections.ObjectModel.ObservableCollection`1[SOC.Model.Code3]' to type 'System.Collections.ObjectModel.ObservableCollection`1[System.Object]'."}
如何在运行时之前不知道类类型的情况下添加 CollectionChanged 事件处理程序
只需将其投射到INotifyCollectionChanged
var collectionChanged = propertyObject as INotifyCollectionChanged;
if (collectionChanged != null)
collectionChanged.CollectionChanged += ...