将处于编辑状态的数据网格行更新为代码来源

Update datagrid row that is in edit state to source from code

我有一个设置了 SelectionUnit="CellOrRowHeader" 的数据网格。

由于我的 DataGrid 位于 TabControl 的内容区域,当我切换选项卡时,当前编辑的行被丢弃。

我想当我得到当前行的 DataRowView 时,我可以调用 row?.EndEdit(); (它是由键盘上的回车触发的,但也可以手动调用)来更新数据源。但是,我似乎无法获得当前的 DatarRowView.

我如何告诉 DataGrid 将所有当前编辑的数据更新到源?我的方法是否正确,如果是,我如何获得当前的 DataRowView?

如果没有,我如何告诉 DataGrid 完成编辑模式并将其新数据更新到源?

这不是一个直接的解决方案,但可以解决问题。

只需将另一个控件聚焦在 gui 上,DataGrid 就会将其更改提交到当前行。效果与在编辑 DataGrid.

时按回车键相同

示例:

我有一个TabControl。当TabControl切换标签时,我想保存当前的更改。

TabControl 的xaml:

    <TabControl DockPanel.Dock="Top" 
                x:Name="TabControl" 
                ItemsSource="{Binding Tabs}" 
                ContentTemplateSelector="{StaticResource TabContentTemplateSelector}"
                SelectionChanged="TabControl_OnSelectionChanged"
                IsSynchronizedWithCurrentItem="True">
....

注意 SelectionChanged="TabControl_OnSelectionChanged" 但它可以是您想要的任何其他控件上的任何其他事件。哪怕是一个命令,随便什么。

您接下来想要的只是聚焦另一个 gui 元素:

private void TabControl_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
  // focus the tab control to lose focus on datagrids - they will then commit changes if possible.
  TabControl.Focus(); // my TabControl is x:Name="TabControl", Focus sets the focus
}

如前所述,效果与在编辑单元格时按回车键完全相同。