Evento WPF DataGrid CellEditEnded

Busco saber cada vez que el usuario ha editado un contenido de la celda de mi DataGrid. Hay un evento CellEditEnding, pero se llama antes de que se realice algún cambio en la colección, a lo que el DataGrid está vinculado.

Mi datagrid está vinculado a ObservableCollection , donde Item es una clase, generada automáticamente desde el punto final WCF mex.

Cuál es la mejor manera de saber cada vez que el usuario ha confirmado los cambios en la colección.

ACTUALIZAR

He intentado el evento CollectionChanged, al final no se activa cuando se modifica el Item .

Puede usar UpdateSourceTrigger=PropertyChanged en el enlace del miembro de la propiedad para el datagrid. Esto asegurará que cuando se active CellEditEnding la actualización ya se haya reflejado en la colección observable.

Vea abajo

     // Mvvm light relay command     // Name is property on the object ie Items.Name   

UpdateSourceTrigger = PropertyChanged cambiará el origen de la propiedad inmediatamente cada vez que cambie la propiedad de destino.

Esto le permitirá capturar ediciones en elementos al agregar un controlador de eventos a la colección observable. El evento no se activa para las ediciones de objetos en la colección.

Si necesita saber si el elemento DataGrid editado pertenece a una colección en particular, puede hacer algo como esto en el evento RowEditEnding de DataGrid:

  private void dg_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) { // dg is the DataGrid in the view object o = dg.ItemContainerGenerator.ItemFromContainer(e.Row); // myColl is the observable collection if (myColl.Contains(o)) { /* item in the collection was updated! */ } } 

Solo debe agregar un controlador de eventos en el evento CollectionChanged ObservableCollection .

Fragmento de código:

 _listObsComponents.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(ListCollectionChanged); // ... void ListCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { /// Work on e.Action here (can be Add, Move, Replace...) } 

cuando e.Action es Replace , esto significa que un objeto de su lista ha sido reemplazado. Este evento, por supuesto, se activa después de que se aplicaron los cambios.

¡Que te diviertas!