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



我有一个设置了SelectionUnit="CellOrRowHeader"的Datagrid。

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

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

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

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

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

只需将另一个控件集中在gui上,DataGrid就会将其更改提交到当前行。效果与编辑DataGrid时按enter键相同。

示例:

我有一个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
}

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

相关内容

  • 没有找到相关文章

最新更新