更新DataGrid的ItemsSource中的单个项目

3
我有一个简单的问题,可能有一个简单的答案。我有一个DataGrid显示一些项目。我希望像这样更新其中一个项目:
var old = (SomeClass)grid.SelectedItem;
var newItem = new SomeClass(...);
old = newItem;
//grid.Items.Refresh();

首先,在此示例中,代码被简化了,但这是重点(真正的问题是通过Linq2Sql更新对象,然后将旧对象设置为更新后的对象)。
无论如何,我希望调用 Items.Refresh 会更新网格的UI,但它并没有。 我肯定在关于DataGrid如何缓存其ItemsSource元素方面遗漏了一些东西,但我想象这是一个相当常见的情况。 有什么想法吗?

这看起来好像你没有使用属性和MVVM。如果你使用了,那么一旦更新该项,它应该通知UI并自动更新。 - Matt Phillips
请看这里:https://msdn.microsoft.com/zh-cn/library/ms229614(v=vs.110).aspx - NoWar
2个回答

2

您需要获取网格的ItemSource并更新其中正确的项目。目前,您正在复制所选项目并对其进行更新,因此它没有任何作用。

我不确定确切的语法,但您需要类似于

((IEnumerable)grid.ItemsSource)[grid.SelectedIndex] = newItem;  

1
IEnumerable没有定义索引运算符,因此这并不完整,但是+1指出OP正在修改引用的副本。 - Ed S.
是的,我不确定确切的语法,也没有打开编译器去找出来。 - Rachel

1

您需要修改ItemsSource中的项。即使如此,只有当该项是DependecyObject或实现了INotifyPropertyChanged时才能起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接