WPF DataGrid CellEditEnding - 数据集未更新Till Row丢失焦点

Ant*_*eco 12 wpf datagrid

一旦单元格从编辑中失去焦点,我需要能够更新数据集的值.我知道当单元格失去焦点时(CellEditEnding),但问题是,它的上下文项的实际更新不会发生,直到实际发生该行的焦点.当只剩下一个项目时,这将成为一个巨大的问题,因为它可能永远不会失去焦点.

如何确保每次完成列编辑(CellEditEnding)时,该行的实际上下文将在该点更新(而不仅仅是当行失去焦点时)

提前致谢!

Rai*_*ast 11

我遇到了类似的问题,我有一个包含5列的DataGrid行.只有在整个数据网格行失去焦点后,才会在源代码中更新5列中的数据.

经过一番搜索,我发现了一种简单的方法.那就是在单元格的数据绑定中添加"UpdateSourceTrigger = LostFocus".

例如:

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ComboBox DisplayMemberPath="Name"
                  ItemsSource="{Binding Path=MyDataSets}"
                  SelectedValue="{Binding Path=DataSelected, UpdateSourceTrigger=LostFocus}"/>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
Run Code Online (Sandbox Code Playgroud)

这将解决问题,因此当每个单元格失去焦点而不是整个行时,来自单元格的数据将立即更新源.

  • 也可以将其更改为:SelectedValue =“ {Binding Path = DataSelected,UpdateSourceTrigger = PropertyChanged}”它对我有用.. thanx :) (2认同)

Ric*_*key 9

您可以DataGrid.CommitEditDataGrid.CellEditEnding处理程序中使用,确保处理重入.

这是一篇描述该技术的博客文章:

  • 即使使用您提到的代码,我开始编辑的第一行仍然处于 EditMode,我无法编辑不同的行进行编辑。 (2认同)

Ric*_*ore 6

我遇到了类似的问题,但“通常”的修复都不起作用......

CommitEdit()对我有用的是使用如下的重载版本

DataGrid1.CommitEdit(DataGridEditingUnit.Row, true);
Run Code Online (Sandbox Code Playgroud)