이것은 그리 많은 질문이 아니며, 이상한 것으로 나를 때리는 것보다 많습니다. ObservableCollection
클래스는 일반적이지만 컬렉션으로 바뀌면 발생하는 CollectionChanged
이벤트가 발생하지 않습니다. 즉, 이벤트 핸들러 내에서 이벤트 args 객체에서 가져온 NewItems
/OldItems
컬렉션의 모든 객체를 적절한 항목 유형으로 직접 캐스팅해야합니다.C# : ObservableCollection - 일반 "CollectionChanged"이벤트가없는 이유는 무엇입니까?
하지만 단순히 해당 이벤트를 일반화 할 수 없었습니까?
public delegate void NotifyCollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs<T> e);
모든 후 다음
public class NotifyCollectionChangedEventArgs<T> {
// ...
public IList<T> NewItems { get; }
public IList<T> OldItems { get; }
와
public virtual event NotifyCollectionChangedEventHandler<T> CollectionChanged;
같은 뭔가가 형식 매개 변수 T
은 이미 안 의미 문제의 ObservableCollection
의 선언에 의해 결정됩니다 어쨌든 형식에 T
(또는 호환 가능)이 아닌 객체를 컬렉션에 추가 할 수 있습니다. 따라서이 모든 것은 완벽하게 유형을 안전하게해야하며 이벤트 처리기 내부의 객체를 어쨌든 가져야하는 유형으로 캐스팅해야하는 번거 로움을 덜어줍니다.
실종 신고를하지 않는 이유가 있습니까? 나는. 이것은 의식적인 디자인의 욕망입니까, 아니면 그냥 감독입니까?
만약 내가 올바르게 (하지만 아주 잘 못 들었을 수도 있습니다) 이것은 제네릭과 작동 할 수 없었던 WPF와 관련이 있었지만 컬렉션 변경을 청취하는 방법을 알아야했습니다 (ObservableCollection은 WPF 기본적으로 그렇게 함) – Polity