0

我有一个带有SelectionUnit="CellOrRowHeader"集合的 Datagrid。

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

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

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

如果不是,我如何告诉 DataGrid 完成编辑模式并将其新数据更新为源?

4

1 回答 1

0

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

可以简单地将另一个控件集中在 gui 上,然后DataGrid将其更改提交到当前行。效果与编辑时按 Enter 相同DataGrid

例子:

我有一个TabControl. 当 TabControl 切换选项卡时,我希望保存当前更改。

TabControl的xml:

    <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 完全一样。

于 2016-07-19T08:02:50.773 回答