INotifyPropertyChanged или INotifyCollectionChanged с DataTable?

Привет у меня возникли проблемы с DataTables. Так что мне нужно обнаружить, когда я изменяю любую ячейку в DataGrid DataTable, которая связана.

Как это сделать? С INotifyPropertyChanged или с INotifyCollectionChanged?

Примечание: я пытаюсь с INotifyPropertyChanged но он обнаруживает только когда я устанавливаю какое-то значение в DataTable, и никогда, когда я изменяю какое-либо значение любой ячейки в DataGrid, я уже пытался OneWay а также TwoWay но ничего не происходит

Заранее спасибо!

2 ответа

Решение

Сетка данных будет привязана к списку объектов. Если вы хотите, чтобы сетка обновлялась при изменении свойств отдельных объектов, то каждый содержащийся объект должен реализовывать INotifyPropertyChanged интерфейс.

INotifyCollectionChanged является интерфейсом, который должна реализовывать коллекция, и предназначена для уведомлений о событиях добавления и удаления.

См. Раздел "Как реализовать коллекции" на этой странице.


Вот способ подойти к вашей проблеме:

  • Создайте новый класс, который предоставляет свойства, которые в настоящее время содержатся в каждом DataRow, На этом классе реализуем INotifyPropertyChanged,
  • Вместо DataTable используйте ObservableCollection<T> или ваш новый класс.

ObservableCollection уже реализует INotifyCollectionChanged Таким образом, это экономит ваши усилия по реализации этого самостоятельно.

Ответ на заголовок вашего вопроса: Ни то, ни другое. На самом деле вам не нужно привязывать DataTable к DataGrid. Вы привязываете DataView. "ADO.NET DataView реализует интерфейс IBindingList, который предоставляет уведомления об изменениях, которые отслеживает механизм привязки". (Обзор источников привязки) Один из ответов на ваш вопрос: вы изменяете ячейку таблицы данных с помощью TextBox (обычно). Сделайте это с новым текстовым полем, унаследованным от TextBox, и переопределите его методы OnGotFocus и OnLostFocus.

Если вы установили источник данных вашей таблицы данных в datatable, то wpf создаст IBindingListView, который связан с сетью данных.

Теперь вы можете редактировать, добавлять и удалять элементы в вашей таблице данных через сетку данных. если вы хотите знать, когда ячейка в вашей таблице данных изменяется, вы можете подписаться на событие DataTable.ColumnChanged.

почему вы хотите знать, когда ячейка меняется?

Другие вопросы по тегам