1

클래스 내의 모든 항목에 CollectionChanged 이벤트를 추가하려고합니다.컬렉션 유형을 모른 채 ObservableColleciton에 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 이벤트 : 나는 다음과 같은 있다고 가정 각 수준에서.

내 문제는 ObservableCollection에 CollectionChanged 이벤트를 할당하려고 할 때 발생합니다. 내 코드는 런타임까지 ObservableColleciton의 항목 유형을 알 수 없습니다. 내가 런타임 때까지 클래스 형을 몰라도 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 이벤트 처리기를 추가하려고하면

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); 
    } 
} 

: 나는 다음과 같은 코드가 있습니다

답변

2

그냥 INotifyCollectionChanged

var collectionChanged = propertyObject as INotifyCollectionChanged; 
if (collectionChanged != null) 
    collectionChanged.CollectionChanged += ... 
에 캐스팅
관련 문제