【问题标题】:Update datagrid row that is in edit state to source from code将处于编辑状态的数据网格行更新为来自代码的源
【发布时间】:2016-07-18 09:32:04
【问题描述】:

我有一个带有SelectionUnit="CellOrRowHeader" 的数据网格。

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

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

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

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

【问题讨论】:

    标签: c# wpf datagrid tabcontrol datarowview


    【解决方案1】:

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

    可以简单地将另一个控件集中在 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
    }
    

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

    【讨论】:

    • 我对此进行了测试,但事实并非如此。数据网格保持编辑模式。
    • 嗯。它适用于我需要的东西。保持编辑模式是什么意思?问题是关于强制它更新到源,而不是退出编辑模式。如果您想退出编辑模式,可以拨打Cell.EndEdit()。
    • 也许我的问题有点不同。我有一个带有一些数据网格的选项卡控件,当我切换选项卡时,我希望我当前正在编辑的数据网格提交其更改。简单地使用tabControl.Focus() 对我来说没有用,我必须明确提交相应数据网格的更改。
    • @rabejens 很有趣。也许它与不同的绑定和焦点设置有关,但很高兴它最终对你有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多