我有一个简单的问题,可能有一个简单的答案。我有一个DataGrid显示一些项目。我希望更新其中一个项目:
var old = (SomeClass)grid.SelectedItem;
var newItem = new SomeClass(...);
old = newItem;
//grid.Items.Refresh();
首先,代码在示例中是微不足道的,但这是重要的一点(真正的问题是通过Linq2Sql更新对象,然后将旧对象设置为更新的对象)。
无论如何,我希望调用Items.Refresh
会更新网格的UI,但事实并非如此。我肯定错过了关于DataGrid如何缓存他们的ItemsSource元素的东西,但我想这是一个非常常见的场景。有什么想法吗?
答案 0 :(得分:2)
您需要获取Grid的ItemSource并更新ItemsSource中的正确项目。现在,您正在制作所选项目的副本并进行更新,因此它什么都不做。
我不确定确切的语法,但你会想要像
这样的东西((IEnumerable)grid.ItemsSource)[grid.SelectedIndex] = newItem;
答案 1 :(得分:1)
您需要修改ItemsSource中的项目。即使只有项目是DependecyObject或实现INotifyPropertyChanged
,它才会起作用