2

这里有一个小故事。我有一个(typeof(ObservableCollection<Area>))绑定树视图的公共属性。我想更新树,但我不想重绘整个事物并丢失所选项目、节点的折叠/展开状态以及我忘记实现的任何其他内容。所以我想我需要更新集合中的区域。我注意到使用 FirstOrDefault 语句并将其设置为等于某些值实际上并不会更改可观察集合中的区域:

var areas = GetAreaInfo(); //Entity Framework query returns ObservableCollection<Area>
foreach (Area a in areas)
{
    var αrea = Areas.FirstOrDefault(α => α.Id == a.Id);
    if (αrea != null)
        αrea = a;  //αrea changes, but Area[0] which is supposed to be αrea doesn't
}

我可以获取对象的引用或指针,这样我就不必遍历可观察集合并使用索引吗?

4

1 回答 1

4

你实际上并没有做你认为你正在做的事情。在您的情况下,面积只是一个变量。当您设置 area = a 时,您正在重置 'area' 变量指向的位置,根本不会更改可观察的集合。

最好的办法是更新 area 的所有属性以匹配 a 的属性。编写 Clone 或 Copy 方法将属性从对象的一个​​实例复制到另一个实例通常很容易。您的另一个选择是从集合中删除 area 并添加 a ,但这可能会导致一些订购问题。

编辑:在您的实际问题上,是的,可以在 C# 中获取指针,但这是一个坏主意。编写将需要更多的工作,需要您将代码标记为不安全,并且将更加难以维护。

于 2012-07-23T13:32:10.983 回答