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 № 1Pour 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>