Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在DataGrid的AutoGeneratingColumn事件中设置DataGridTextColumn的binding.UpdateSourceTrigger_C#_Wpf_Datagrid - Fatal编程技术网

C# 如何在DataGrid的AutoGeneratingColumn事件中设置DataGridTextColumn的binding.UpdateSourceTrigger

C# 如何在DataGrid的AutoGeneratingColumn事件中设置DataGridTextColumn的binding.UpdateSourceTrigger,c#,wpf,datagrid,C#,Wpf,Datagrid,我想从AutoGenerationColumn事件中的代码中将DataGridTextColumn绑定的UpdateSourceTrigger设置为“LostFocus”。默认行为是,源仅在行失去焦点时更新,但我需要在单元格失去焦点时更新 以下是我的尝试: private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) {

我想从AutoGenerationColumn事件中的代码中将DataGridTextColumn绑定的UpdateSourceTrigger设置为“LostFocus”。默认行为是,源仅在行失去焦点时更新,但我需要在单元格失去焦点时更新

以下是我的尝试:

    private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
            //my attempt to get cell to update on cell lost-focus, rather than row lost-focus
            Binding newBinding = new Binding(e.PropertyName);
            newBinding.UpdateSourceTrigger = UpdateSourceTrigger.LostFocus;
            (e.Column as DataGridTextColumn).Binding = newBinding;
    }
这似乎不起作用,因为只有在行失去焦点时才更新源


注意:我知道这通常是在列定义的XAML中完成的,但我无法将其放在那里,因为我的列是在运行时动态生成的。

我尝试了您的代码,并且绑定会在我将选项卡放入下一个单元格时更新viewmodel属性,而不是在我将选项卡移出整行时更新。我想这就是你想要做的。如果我将其设置为
UpdateSourceTrigger.PropertyChanged
,每次击键都会得到预期的属性更新。您使用什么数据结构作为数据网格的项源?我使用的是一个数据表,当触发器设置为LostFocus或PropertyChanged时,我看不到更新——只有当行仍然失去焦点时才会看到更新。我有一个POCO对象集合。我现在正在设置一个DataTable测试用例。如何检查正在更新的值?我正在查看ViewModel中的DataTable.Rows[0].ItemsArray。我看到,如果在执行ViewModel代码之前从代码隐藏中访问相同的DataTable,则值会按预期更新。但是,当稍后在ViewModel代码中访问DataTable属性时,会显示旧值。我想我的问题可能比我原来想的更复杂。我将不得不进一步调查此事。谢谢你的帮助。我处理了DataGrid.CellEditEnding。我发现,使用AutoGeneratingColumn处理程序,如果我从编辑的单元格中取出tab并查看viewmodel中的DataTable,DataTable中的值已经更新。如果按回车键提交编辑,则该编辑尚未更新。在CellEditEnding中,我可以检查
e.EditingElement是否为TextBox
,如果是,则调用
(e.EditingElement为TextBox).GetBindingExpression(TextBox.TextProperty).UpdateSource()--这将更新返回案例中的绑定。不管好坏