如何复制可观察的集合

时间:2010-11-14 20:46:23

标签: wpf copy observablecollection

我有

Observablecollection<A> aRef = new Observablecollection<A>();
bRef = aRef(); 

在这种情况下,两者都指向相同的ObservableCollection ...如何制作不同的副本?

2 个答案:

答案 0 :(得分:23)

这样做:

// aRef being an Observablecollection 
Observablecollection<Entity> bRef = new Observablecollection<Entity>(aRef);

这将创建一个可观察的集合,但项目仍然指向原始项目。如果您需要项目指向克隆而不是原始项目,则需要实现然后调用克隆方法。

<强>更新

如果您尝试添加到列表中,然后observable集合具有原始列表,只需通过传递原始列表来创建Observablecollection:

List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere();
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList);

答案 1 :(得分:10)

您可以在实体定义中实现ICloneable接口,然后使用内部转换制作ObservableCollection的副本。因此,您将获得克隆的List,而不会引用旧项目。然后,您可以创建新的ObservableCollection whit克隆的List

public class YourEntity : ICloneable {
    public AnyType Property { get; set; }
    ....
    public object Clone()
    {
        return MemberwiseClone();
    }
}

实施将是

var clonedList = originalObservableCollection.Select(objEntity => (YourEntity) objEntity.Clone()).ToList();

ObservableCollection<YourEntity> clonedCollection = new ObservableCollection<YourEntity>(clonedList);