TextChanged/LostFocus/etc. event for DataGridTextColumn

c#, datagrid, wpf, wpfdatagrid, xaml

Solution

To accomplish this I used the `CellEditEnding` event on the data grid itself.

this.TheGrid.CellEditEnding += new EventHandler<DataGridCellEditEndingEventArgs>(TheGrid_CellEditEnding);

In the method you can then use a `Dispatcher` to delay the call to a method so the value is stored back in the bound object.

private void TheGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    Dispatcher.BeginInvoke(new Action(this.CellEdited));
}

You can also pass the `DataGridCellEditEndingEventArgs` to the method to allow you to inspect the row and column of the cell that was edited along with the underlying `TextBox`.

Also since the data grid is concerned about objects the row index is not too relevant and therefore not easily obtainable (that I could find).

Problem

I have a list of object bound to a `DataGrid` in a WPF page and I am looking to add an object directly after the current one if the value entered in a specific column is less than a certain number. ``` <my:DataGridTextColumn Binding="{Binding Path=Hours}"/> ``` I cannot for the life of me figure out how to bind to an event on the underlying `TextBox`. Various sites reference the ability to do this but none provide the associated code. For now I have been using a `DataGridTemplateColumn` with a `TextBox` inside of it but I don't seem to the able to get the current row with that solution.

Original source