Как обновить существующий элемент ObservableCollection?
-
03-07-2019 - |
Вопрос
У меня есть экземпляр ObservableCollection, привязанный к списку WPF с двумя отдельными шаблонами данных (один для отображения, другой для редактирования).Шаблон данных для редактирования имеет одностороннюю привязку к текстовому полю и кнопку «Сохранить».
Какие изменения мне нужно внести, чтобы при нажатии кнопки «Сохранить» (после перевода элемента списка в режим редактирования) значение, которое я изменяю в текстовом поле, заменяло значение в ObservableCollection (и на дисплее)?
Решение
Элементы в вашей коллекции должны относиться к типу, реализующему интерфейс INotifyPropertyChanged.Таким образом, ваш список будет уведомлен о том, что значение свойства в вашем отдельном объекте элемента изменилось.ObservableCollection вызывает событие CollectionChanged только при изменении коллекции (добавление, удаление элементов и т. д.).
Цитата из статьи библиотеки MSDN о ObservableCollection
Чтобы полностью поддержать передачу значений данных из объектов исходного привязки к целям привязки, каждый объект в вашей коллекции, который поддерживает свойства привязки, должен реализовать соответствующий механизм уведомления, измененный свойство, такой как интерфейс INOTIFYPropertychanged.
Другие советы
Чтобы уведомление об изменении возникало в привязке между привязанным клиентом и источником данных, ваш привязанный тип должен:
- Реализуйте интерфейс inotifypropertychanged (предпочтительный).
- Предоставьте событие изменения для каждого свойства связанного типа.
Не делайте и то, и другое.
Источник: MSDN:Интерфейс INotifyPropertyChanged
Я решил аналогичную проблему, используя класс BindingList<T>.
Событие ListChanged запускается как при изменении коллекции, так и при изменении отдельного элемента.
Представлено в .Net 3.5.