更新DataGrid的ItemsSource中的单个项目

时间:2011-03-11 05:24:40

标签: c# wpf datagrid

我有一个简单的问题,可能有一个简单的答案。我有一个DataGrid显示一些项目。我希望更新其中一个项目:

var old = (SomeClass)grid.SelectedItem;
var newItem = new SomeClass(...);
old = newItem;
//grid.Items.Refresh();

首先,代码在示例中是微不足道的,但这是重要的一点(真正的问题是通过Linq2Sql更新对象,然后将旧对象设置为更新的对象)。

无论如何,我希望调用Items.Refresh会更新网格的UI,但事实并非如此。我肯定错过了关于DataGrid如何缓存他们的ItemsSource元素的东西,但我想这是一个非常常见的场景。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您需要获取Grid的ItemSource并更新ItemsSource中的正确项目。现在,您正在制作所选项目的副本并进行更新,因此它什么都不做。

我不确定确切的语法,但你会想要像

这样的东西
((IEnumerable)grid.ItemsSource)[grid.SelectedIndex] = newItem;  

答案 1 :(得分:1)

您需要修改ItemsSource中的项目。即使只有项目是DependecyObject或实现INotifyPropertyChanged

,它才会起作用