wpf binding inotifypropertychanged inotifycollectionchanged

wpf - INotifyPropertyChanged o INotifyCollectionChanged con DataTable?



binding (2)

Hola, estoy teniendo algún problema con DataTables. Entonces, lo que necesito es detectar cada vez que cambio cualquier celda en el DataGrid del DataTable que está enlazado.

¿Cómo hacerlo? ¿Con INotifyPropertyChanged o con INotifyCollectionChanged ?

Nota: Lo estoy intentando con INotifyPropertyChanged pero solo detecta cuando establezco algún valor en DataTable, y nunca cuando cambio ningún valor de ninguna celda en DataGrid, ya he probado OneWay y OneWay pero no ocurre nada.

¡Gracias por adelantado!


si configuras el origen del elemento de tu cuadrícula de datos en una tabla de datos, entonces wpf crea una IBindingListView que está vinculada a la cuadrícula de datos.

Lo que puedes hacer ahora es editar, agregar y eliminar elementos a tu datatable vía datagrid. si desea saber cuándo se cambia una celda de su tabla de datos, puede suscribirse al evento DataTable.ColumnChanged.

¿Por qué quieres saber cuándo se cambia una celda?


La cuadrícula de datos estaría vinculada a una lista de objetos. Si desea que la cuadrícula se actualice cuando cambian las propiedades individuales del objeto, entonces cada objeto contenido debe implementar la interfaz INotifyPropertyChanged .

INotifyCollectionChanged es una interfaz que la colección debe implementar, y es para notificaciones de eventos de adición y eliminación.

Consulte la sección "Cómo implementar colecciones" en esta página .

Aquí hay una forma de abordar su problema:
  • Cree una nueva clase que exponga las propiedades actualmente en cada DataRow . En esta clase, implemente INotifyPropertyChanged .
  • En lugar de una DataTable , use un ObservableCollection<T> o su nueva clase.

ObservableCollection ya implementa INotifyCollectionChanged , por lo que le ahorra el esfuerzo de implementarlo usted mismo.