WPF Datagrid Row Editing “ENDED” event

后端 未结 8 2250
轻奢々
轻奢々 2020-12-09 01:48

I know that WPF datagrid has \"RowEditEnding\" event , but I need to fire the event on after the Row has comitted to check if the newly added row is duplicated and merge the

相关标签:
8条回答
  • 2020-12-09 02:21

    You can use UpdateSourceTrigger=PropertyChanged on 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 this post https://stackoverflow.com/a/27239243/9285072

    0 讨论(0)
  • 2020-12-09 02:25

    Maybe you can use the event "CurrentCellChanged". This fires when you start editing a cell too, but maybe you can find a way to not always do everything you want to do in your method.

    I had same problem when i wanted to check if the changes in the datagrid are actually changes to the original values. This event is working for my needs.

    Hope i could tell you something new.

    0 讨论(0)
  • Taking from @MaherBenIssa's answer, I used this to avoid add and remove delegate:

        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
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-09 02:28

    I found an answer to your question usingVS2010

    condition if (e.EditAction == DataGridEditAction.Commit) in the RowEditEnding will fulfill ur requirement

    Please see the below code.

    private void dataGrid1_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
    {
        if (e.EditAction == DataGridEditAction.Commit)
        {
            MessageBox.Show("asd");
        }
    }
    

    This is the Xaml Behind.

    <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>
    
    0 讨论(0)
  • 2020-12-09 02:29
        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
        }
    
    0 讨论(0)
  • 2020-12-09 02:31

    VB.NET solution to the solution of @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
    
    0 讨论(0)
提交回复
热议问题