我有
Observablecollection<A> aRef = new Observablecollection<A>();
bRef = aRef();
在这种情况下,两者都指向相同的ObservableCollection
...如何制作不同的副本?
答案 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);