我的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.
}
?
答案 0 :(得分:2)
正如其名称提示,CellEditEnding
事件在提交编辑之前被触发。可悲的是,由于没有CellEditEnded事件,没有直接的方法可以做你想做的事。
这里有三个选项:
UpdateSourceTrigger
设置为PropertyChanged
,以便动态应用更改,而不是等待提交。NotifyOnSourceUpdated
设置为True
,然后在代码隐藏中添加Binding.AddSourceUpdatedHandler(MyDataGrid,OnDataGridSourceUpdated)
(查看此处了解详情:http://wpf.codeplex.com/discussions/39356)。CellEditEnding
和RowEditEnding
事件。在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%你的角色。