Если вы вызываете событие PropertyChanged
для свойства, привязка проверяет, изменилось ли значение свойства, и обновляет цель, если оно имело.Поскольку Objects
является ссылочным типом, его значение изменяется только в том случае, если вы присваиваете его новому экземпляру, что делает ToList()
или ToArray()
.
Другими словами, когда ваш код повышается PropertyChanged
, вы не утверждаете, что содержимое списка изменилось, вы утверждаете, что свойство содержит новый список.Привязка проверяет свойство источника по отношению к свойству цели и не соглашается.
Вот почему вы должны использовать ObservableCollection<T>
или другую коллекцию, которая реализует INotifyCollectionChanged
.Если вы привязываете к свойству, которое реализует INotifyCollectionChanged
, то привязка будет прослушивать как события PropertyChanged
(генерируемые при создании новой коллекции и изменении значения свойства), так и CollectionChanged
(возникающие при добавлении или удалении элементовиз коллекции).
Также обратите внимание, что недостаточно изменить основную коллекцию на ObservableCollection<T>
.Вы должны изменить тип свойства, которое вы выставляете.Привязка не будет пытаться прослушивать события в свойстве IEnumerable<T>
, поскольку эти события не отображаются этим интерфейсом.