将处于编辑状态的数据网格行更新为代码来源
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
}
如前所述,效果与在编辑单元格时按回车键完全相同。
我有一个设置了 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
}
如前所述,效果与在编辑单元格时按回车键完全相同。