Вопрос

У меня есть экземпляр ObservableCollection, привязанный к списку WPF с двумя отдельными шаблонами данных (один для отображения, другой для редактирования).Шаблон данных для редактирования имеет одностороннюю привязку к текстовому полю и кнопку «Сохранить».

Какие изменения мне нужно внести, чтобы при нажатии кнопки «Сохранить» (после перевода элемента списка в режим редактирования) значение, которое я изменяю в текстовом поле, заменяло значение в ObservableCollection (и на дисплее)?

Это было полезно?

Решение

Элементы в вашей коллекции должны относиться к типу, реализующему интерфейс INotifyPropertyChanged.Таким образом, ваш список будет уведомлен о том, что значение свойства в вашем отдельном объекте элемента изменилось.ObservableCollection вызывает событие CollectionChanged только при изменении коллекции (добавление, удаление элементов и т. д.).

Цитата из статьи библиотеки MSDN о ObservableCollection

Чтобы полностью поддержать передачу значений данных из объектов исходного привязки к целям привязки, каждый объект в вашей коллекции, который поддерживает свойства привязки, должен реализовать соответствующий механизм уведомления, измененный свойство, такой как интерфейс INOTIFYPropertychanged.

Другие советы

Чтобы уведомление об изменении возникало в привязке между привязанным клиентом и источником данных, ваш привязанный тип должен:

  • Реализуйте интерфейс inotifypropertychanged (предпочтительный).
  • Предоставьте событие изменения для каждого свойства связанного типа.

Не делайте и то, и другое.

Источник: MSDN:Интерфейс INotifyPropertyChanged

Я решил аналогичную проблему, используя класс BindingList<T>.

Событие ListChanged запускается как при изменении коллекции, так и при изменении отдельного элемента.

Представлено в .Net 3.5.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top