WPF Datagrid row Editing "ENDED" event
je sais que WPF datagrid a un événement "RowEditEnding", mais j'ai besoin de lancer l'événement après que la rangée soit entrée pour vérifier si la rangée nouvellement ajoutée est dupliquée et fusionner la rangée dupliquée. La propriété "CanUserAddRow" de mon datagrid est définie à True.
J'utilise EntityObservableCollection qui étend ObservableCollection pour synchroniser mon entity avec la collection. Ainsi, j'ai considéré un événement Modifiéuncollection, mais l'événement "InsertItem" est soulevé une fois que l'utilisateur clique sur le nouvel élément place holder row, ce qui signifie que l'objet est toujours vide et que je ne peux pas vérifier s'il y a un double.
y a-t-il quoi qu'il en soit que je puisse soulever L'événement RowEditEnded?
Merci...
7 réponses
private void dgrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (this.dgrid.SelectedItem != null)
{
(sender as DataGrid).RowEditEnding -=dgrid_RowEditEnding;
(sender as DataGrid).CommitEdit();
(sender as DataGrid).Items.Refresh();
(sender as DataGrid).RowEditEnding += dgrid_RowEditEnding;
}
else Return;
//then check if the newly added row is duplicated
}
condition if (E. EditAction = = DataGridEditAction.Commit) dans le RowEditEnding remplira ur exigence
veuillez consulter le code ci-dessous.
private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
MessageBox.Show("asd");
}
}
C'est le XAML derrière.
<DataGrid AutoGenerateColumns="False" CanUserAddRows="True" Height="241"
RowEditEnding="dataGrid1_RowEditEnding" HorizontalAlignment="Left"
Name="dataGrid1" VerticalAlignment="Top" Width="573" >
<DataGrid.Columns>
<DataGridTextColumn Header="name" Binding="{Binding id}"
Width="300">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
D'après la réponse de @MaherBenIssa, j'ai utilisé ceci pour éviter d'ajouter et de supprimer le délégué:
private bool locker = true;
private void dgArticles_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (locker)
{
try{
locker = false;
(sender as DataGrid).CommitEdit(DataGridEditingUnit.Row, false);
((sender as FrameworkElement).DataContext as ViewModel)?.Edit(e.Row.DataContext);
}
finally{
locker = true; //enable editing again
}
}
}
essayez de configurer la fonction CommitEdit () pour votre datagrid. Je l'ai utilisé ici:
private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
{
this.MyDataGrid.CommitEdit(DataGridEditingUnit.Row, false);
}
je me demande pourquoi vous trouvez le moyen d'augmenter L'événement RowEditEnded; si vous implémenter l'événement RowEditEnding de datagrid; chaque fois que vous éditez une ligne et changez le focus de cette ligne, la ligne sera engagée et RowEditEnding sera augmentée;
ainsi, après que la rangée s'est engagée RowEditEnding sera augmenté et fonctionne tout comme RowEditEnded;
ai-je mal compris quelque chose dans votre message?
VB.NET solution à la solution de @ MaherBenIssa
Private Sub dgLayer_RowEditEnding(sender As Object, e As DataGridRowEditEndingEventArgs)
Dim d As DataGrid
d = DirectCast(sender, DataGrid)
RemoveHandler d.RowEditEnding, AddressOf dgLayer_RowEditEnding
dgLayer.CommitEdit()
sender.Items.Refresh()
AddHandler d.RowEditEnding, AddressOf dgLayer_RowEditEnding
End Sub
Vous pouvez utiliser UpdateSourceTrigger=PropertyChanged
sur la liaison du membre de propriété pour le datagrid. Cela permettra d'assurer que lorsque https://stackoverflow.com/a/27239243/9285072