在WPF数据网格中,如何在单元格编辑后获取新行?

时间:2015-06-04 09:55:16

标签: c# wpf datagrid

我的foreach ( $x as &$val ) { $val = array_filter($val); } 绑定到DataGrid。在网格中的每个单元格编辑之后,我需要获取新的DataTable值。只有在从行而不是单元格中丢失焦点后才能获得新值。

DataRow

我应该怎样做才能获得新的<DataGrid ItemsSource="{Binding}" CellEditEnding="grid_CellEditEnding"/> private void grid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { //Both the DataTable and the row obtained from "e" has the old row. }

1 个答案:

答案 0 :(得分:2)

正如其名称提示,CellEditEnding事件在提交编辑之前被触发。可悲的是,由于没有CellEditEnded事件,没有直接的方法可以做你想做的事。

这里有三个选项:

  1. 将单元格的约束UpdateSourceTrigger设置为PropertyChanged,以便动态应用更改,而不是等待提交。
  2. 将单元格的约束NotifyOnSourceUpdated设置为True,然后在代码隐藏中添加Binding.AddSourceUpdatedHandler(MyDataGrid,OnDataGridSourceUpdated)(查看此处了解详情:http://wpf.codeplex.com/discussions/39356)。
  3. 或处理CellEditEndingRowEditEnding事件。在CellEditEnding中,使用Dispatcher.BeginInvoke强制进行DataGrid.CommitEdit()调用。在RowEditEnding中,再次使用BeginInvoke来执行代码。它将在提交行编辑后执行,但您必须通过索引或类似方式手动检索行值(请在此处查看类似示例(第5点):http://blogs.msdn.com/b/vinsibal/archive/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid.aspx ) - 请记住,由于您无法控制代码执行的时间,您的项目可能会进一步改变,重新安排或类似的东西,因此,如果没有一些工作,这是不可靠的100%你的角色。