ObservableCollection
реализует как INotifyCollectionChanged
, так и INotifyPropertyChanged
.
Я понимаю, что о добавлении, удалении (+очистка) и замене элементов потребители уведомляются через событие коллекции
CollectionChanged
, и что обновления в существующих элементах можно отслеживать с помощью элементов ' событиеPropertyChanged
, если они реализуют себяINotifyPropertyChanged
.Я читал от других, что вы не можете зарегистрироваться на событие коллекции
PropertyChanged
, потому что оно доступно только для чтения.
Итак, какова его цель, как мы можем его использовать?
Комментарии здесь и там, кажется, запутывают дискуссию, подразумевая, что магия ObservableCollection
заключается в реализации обоих интерфейсов, позволяющих получать уведомления как об изменениях содержимого коллекций, так и элементов, хотя это неверно (это игнорируется во многих примерах, где коллекция привязана к списку, который волшебным образом обновляется после изменения содержимого элементов, предполагая, что коллекция уведомляет список).
На самом деле кажется, что единственным преимуществом коллекции является реализация INotifyCollectionChanged
. Работать с изменениями свойств элементов с ObservableCollection
кажется ничуть не проще, чем с другой коллекцией: это возможно только в том случае, если элементы реализуют INotifyPropertyChanged
, чего они могут и не делать, и если пользователю удается перехватить это событие независимо от коллекции.
Это правильно?