WPF DataGrid CellEditEnded event

10,790

You can use UpdateSourceTrigger=PropertyChangedon the binding of the property member for the datagrid. This will ensure that when CellEditEnding is fired the update has already been reflected in the observable collection.

See below

<DataGrid SelectionMode="Single"
          AutoGenerateColumns="False"
          CanUserAddRows="False"
          ItemsSource="{Binding Path=Items}" // This is your ObservableCollection
          SelectedIndex="{Binding SelectedIndexStory}">
          <e:Interaction.Triggers>
              <e:EventTrigger EventName="CellEditEnding">
                 <cmd:EventToCommand PassEventArgsToCommand="True" Command="{Binding EditStoryCommand}"/> // Mvvm light relay command
               </e:EventTrigger>
          </e:Interaction.Triggers>
          <DataGrid.Columns>
                    <DataGridTextColumn Header="Description"
                        Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" /> // Name is property on the object i.e Items.Name
          </DataGrid.Columns>

</DataGrid>

UpdateSourceTrigger = PropertyChanged will change the property source immediately whenever the target property changes.

This will allow you to capture edits to items as adding an event handler to the observable collection changed event does not fire for edits of objects in the collection.

Share:
10,790
Arsen Zahray
Author by

Arsen Zahray

Updated on June 06, 2022

Comments

  • Arsen Zahray
    Arsen Zahray almost 2 years

    I'm looking to know every time the user has edited a content of my DataGrid's cell. There's CellEditEnding event, but its called before any changes were made to the collection, that the DataGrid is bound to.

    My datagrid is bound to ObservableCollection<Item>, where Item is a class, automatically generated from WCF mex endpoint.

    What is the best way to know every time the user has committed the changes to the collection.

    UPDATE

    I've tried CollectionChanged event, end it does not get triggered when Item gets modified.

  • Arsen Zahray
    Arsen Zahray about 12 years
    In fact, I did just that before I posted the question. CollectionChanged event does not get triggered when the user modifies the collection
  • NestorArturo
    NestorArturo about 12 years
    This is not your answer, but, CollectionChanged reports only if somehow an item is added or removed. Chances are the grid let you modify an item without really altering the collection itself, and so not firing the aforementioned event.
  • Damascus
    Damascus about 12 years
    Woops, yes, misunderstanding here, CollectionChanged will be fired when a full Item will change (ie. you put a new Item() instead of the previous). You'd need your Item class to implement INotifyPropertyChanged if you want to catch every modification :)
  • Jeff
    Jeff over 4 years
    How would this work on a AutoGenerateColumns="True" though? Looks like in order for this to be possible, we need to specify each column explicitly.