我有一个设置了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键完全相同。