#wpf #data-binding #datagrid #observablecollection
Вопрос:
У меня есть две сетки данных, привязанные к одному и тому же свойству ObservableCollection в моей модели представления. Когда я редактирую существующую строку в одной сетке данных, другая обновляется после ввода строки.
Но как это работает? Событие NotifyCollectionChanged не возникает в базовой коллекции ObservableCollection. Я проверил это, подписавшись на мероприятие.
Ответ №1:
В этом случае вы изменяете свойства элемента (сущности) коллекции, а не саму коллекцию.
Поэтому событие CollectionChanged не вызывается.
Чтобы обновить свойства в сущности, в ней необходимо реализовать INotifyPropertyChanged.
Но если изменение свойств происходит ТОЛЬКО через привязки, то даже в этом нет необходимости.
Привязки используют в своей работе описатель свойств и другие типы отражения.
Это позволяет привязкам «знать», что свойство было изменено другой привязкой.
Если вы говорите по-русски, прочтите мою статью: https://www.cyberforum.ru/wpf-silverlight/thread2650880.html
Комментарии:
1. И в каждой книге говорится, что переплет работает через INotifyPropertyChanged. Я разочарован тем, как много вещей работают не так, как описано в документах.
2. «привязка работает через INotifyPropertyChanged» — это немного другое. Правильно «привязка с использованием INotifyPropertyChanged». Это один из механизмов, используемых привязками, но не единственный. Существует множество сложностей в том, как работают привязки. Вы помните: для пути к свойству им просто нужно указать строковое значение. И поэтому невозможно получить стоимость недвижимости без размышлений.