我一直在尝试在WPF DataGrid控件的CellEditEnding事件处理程序中更改同一行内的不同单元格值。
如果我编辑现有行中的单元格值,则按预期工作。但是,当添加新行时,如果鼠标点击另一个单元格值而没有进入编辑模式,则不会将更改反映到UI中。
通过按Tab键将焦点移动到下一个单元格也能按预期工作,但是点击应该也能起作用,对吗?
到目前为止,我尝试更改绑定的UpdateSourceTrigger、NotifyOnSourceUpdated和NotifyOnTargetUpdated,但似乎都没有起作用。我还尝试通过阅读相关主题来修复问题:http://codefluff.blogspot.fi/2010/05/commiting-bound-cell-changes.html,但这些方法似乎也没有什么帮助。
我找到的一个解决方案是以下代码片段:
如果我编辑现有行中的单元格值,则按预期工作。但是,当添加新行时,如果鼠标点击另一个单元格值而没有进入编辑模式,则不会将更改反映到UI中。
通过按Tab键将焦点移动到下一个单元格也能按预期工作,但是点击应该也能起作用,对吗?
public MainWindow()
{
InitializeComponent();
DataTable dataTable = new DataTable();
dataTable.Columns.Add(new DataColumn());
dataTable.Columns.Add(new DataColumn());
DataRow existingRow = dataTable.NewRow();
dataTable.Rows.Add(existingRow);
this.MyDataGrid.ItemsSource = dataTable.DefaultView;
this.MyDataGrid.CellEditEnding += MyDataGrid_CellEditEnding;
}
void MyDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
(e.Row.Item as DataRowView).Row[1] = "a string that should be displayed immediatly";
}
到目前为止,我尝试更改绑定的UpdateSourceTrigger、NotifyOnSourceUpdated和NotifyOnTargetUpdated,但似乎都没有起作用。我还尝试通过阅读相关主题来修复问题:http://codefluff.blogspot.fi/2010/05/commiting-bound-cell-changes.html,但这些方法似乎也没有什么帮助。
我找到的一个解决方案是以下代码片段:
var frameworkElement = this.MyDataGrid.Columns[1].GetCellContent(e.Row);
frameworkElement.SetValue(TextBlock.TextProperty, "a string that should be displayed immediatly");
但我不想依赖于DependencyProperties,因为我可能不知道底层的显示类型。
所以问题是,在不使用提供的第二个代码片段的情况下,我该如何实现对新行的UI更新与现有行相同?感觉我错过了什么..
编辑:使用ClipboardPaste也可以设置新值,但由于某种原因,原始编辑的值将会丢失。
编辑2:XAML目前是普通的DataGrid,我尝试手动设置列及其绑定,但由于没有使它们工作,我已将其删除以使示例代码简单。
<DataGrid x:Name="MyDataGrid" />
编辑3: 添加此图像以更好地描述问题。因此,单击下一个单元格后,我希望文本被显示。 问题示例图像
编辑4: 使用Snoop查看单元格似乎设置了元素可见,同时调用绑定的.UpdateTarget();似乎有所帮助,但它不会自动工作。仍然想知道原因是什么...
编辑5: 我希望这可以与DataTable一起使用,因为我需要它的其他功能。