Это не столько вопрос, а еще кое-что, что показалось мне странным: класс ObservableCollection
является универсальным, но событие CollectionChanged
, которое возникает при изменении в коллекции, не имеет места. Это означает, что в обработчике событий вам необходимо привести все объекты в коллекциях NewItems
/ OldItems
, которые вы получаете из объекта args события, к нужному типу элемента самостоятельно.
Но разве нельзя было просто сделать это событие общим? Что-то вроде
public virtual event NotifyCollectionChangedEventHandler<T> CollectionChanged;
с
public delegate void NotifyCollectionChangedEventHandler(object sender, NotifyCollectionChangedEventArgs<T> e);
, а затем
public class NotifyCollectionChangedEventArgs<T> {
// ...
public IList<T> NewItems { get; }
public IList<T> OldItems { get; }
В конце концов, параметр типа T
уже определен объявлением рассматриваемого ObservableCollection
, что означает, что вы никогда не сможете добавлять объекты, не относящиеся к типу T
(или не совместимые с ним). ) в коллекцию в любом случае. Таким образом, все это должно быть абсолютно безопасным для типов и избавить нас от необходимости приводить объекты внутри обработчика событий к тому типу, который, как мы знаем, они должны иметь в любом случае.
Есть ли причина не делать это так, как мне не хватает? То есть это осознанное проектное решение или просто упущение?