/ / TextChanged / LostFocus / etc. événement pour DataGridTextColumn - c #, wpf, xaml, datagrid, wpfdatagrid

TextChanged / LostFocus / etc. événement pour DataGridTextColumn - c #, wpf, xaml, datagrid, wpfdatagrid

J'ai une liste d'objets liés à un DataGrid dans une page WPF et je cherche à ajouter un objet directement après celui en cours si la valeur entrée dans une colonne spécifique est inférieure à un certain nombre.

<my:DataGridTextColumn Binding="{Binding Path=Hours}"/>

Je ne peux pas pour la vie de comprendre comment se lier à un événement sur le sous-jacent TextBox. Divers sites font référence à cette possibilité, mais aucun ne fournit le code associé. Pour le moment j'utilise un DataGridTemplateColumn avec un TextBox à l’intérieur, mais je ne semble pas en mesure d’obtenir la rangée actuelle avec cette solution.

Réponses:

3 pour la réponse № 1

Pour ce faire, j'ai utilisé le CellEditEnding événement sur la grille de données elle-même.

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

Dans la méthode, vous pouvez alors utiliser un Dispatcher pour retarder l'appel d'une méthode afin que la valeur soit stockée dans l'objet lié.

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

Vous pouvez également passer le DataGridCellEditEndingEventArgs à la méthode pour vous permettre d'inspecter la ligne et la colonne de la cellule qui a été modifiée avec le sous-jacent TextBox.

De plus, étant donné que la grille de données est préoccupée par les objets, l'index de ligne n'est pas trop pertinent et donc difficile à obtenir (que j'ai pu trouver).


0 pour la réponse № 2

Vous pouvez utiliser ce code pour toutes les cellules et lignes mises à jour:

<sdk:DataGrid ItemsSource="{Binding Collection}" CellEditEnded="DataGrid_CellEditEnded" RowEditEnded="DataGrid_RowEditEnded">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Path=Hours}" Width="Auto" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>