如何复制可观察的集合

Rel*_*ity 18 wpf copy observablecollection

我有

Observablecollection<A> aRef = new Observablecollection<A>();
bRef = aRef(); 
Run Code Online (Sandbox Code Playgroud)

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

Ali*_*tad 24

做这个:

// aRef being an Observablecollection 
Observablecollection<Entity> bRef = new Observablecollection<Entity>(aRef);
Run Code Online (Sandbox Code Playgroud)

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

UPDATE

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

List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere();
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList);
Run Code Online (Sandbox Code Playgroud)


Jai*_*rín 11

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

public class YourEntity : ICloneable {
    public AnyType Property { get; set; }
    ....
    public object Clone()
    {
        return MemberwiseClone();
    }
}
Run Code Online (Sandbox Code Playgroud)

实施将是

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

ObservableCollection<YourEntity> clonedCollection = new ObservableCollection<YourEntity>(clonedList);
Run Code Online (Sandbox Code Playgroud)