Wpf 如何复制可观察集合
我有Wpf 如何复制可观察集合,wpf,copy,observablecollection,Wpf,Copy,Observablecollection,我有 Observablecollection aRef=新的Observablecollection(); bRef=aRef(); 在这种情况下,两个都指向相同的可观察集合。如何制作不同的副本?执行以下操作: Observablecollection<A> aRef = new Observablecollection<A>(); bRef = aRef(); //aRef是一个可观察的集合 Observablecollection bRef=新的Observa
Observablecollection aRef=新的Observablecollection();
bRef=aRef();
在这种情况下,两个都指向相同的可观察集合
。如何制作不同的副本?执行以下操作:
Observablecollection<A> aRef = new Observablecollection<A>();
bRef = aRef();
//aRef是一个可观察的集合
Observablecollection bRef=新的Observablecollection(aRef);
这将创建一个可观察的集合,但项仍指向原始项。如果需要这些项指向克隆而不是原始项,则需要实现并调用克隆方法
更新
如果尝试添加到列表中,然后可观察集合具有原始列表,则只需通过传递原始列表来创建可观察集合:
// aRef being an Observablecollection
Observablecollection<Entity> bRef = new Observablecollection<Entity>(aRef);
List originalinitylist=getthatoriginalinitylistfromwhere();
Observablecollection bRef=新的Observablecollection(原始列表);
您可以在实体定义中实现ICloneable
接口,然后使用内部强制转换复制observedcollection
。因此,您将有一个克隆的列表
,其中没有任何对旧项目的引用。然后,您可以使用克隆的列表创建新的observateCollection
List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere();
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList);
执行工作将是:
public class YourEntity : ICloneable {
public AnyType Property { get; set; }
....
public object Clone()
{
return MemberwiseClone();
}
}
var clonedList=originalObservableCollection.Select(objEntity=>(yourtentity)objEntity.Clone()).ToList();
ObservableCollection克隆收集=新的ObservableCollection(克隆列表);
谢谢……但我真正的问题是我有一个可观察的集合……当我向其中添加一个新项目时……它不会反映在UI中。所以我现在要做的是将整个集合复制到临时集合…然后将新项目添加到临时集合。然后重新分配临时集合。但是我有可观察的集合作为输入。例如…我有一个120个项目的可观察集合..我向其中添加了新项目..现在它有121个项目..然后UI应该显示121个项目,所以没有办法。Observablecollection不公开原始列表。您必须公开原始列表。我们可以使用“全部”、“选择”方法来获取新的可观察集合吗?关键是您要添加到原始列表中,并且您希望新OC显示您的更改。“全部”或“选择”将创建一个新列表。但你为什么要使用新的OC呢?只需将旧的OC绑定到一个新控件,这似乎就是您所需要的。当绑定originalObservableCollection时,这不起作用。当您更改其中的某些内容时,clonedCollection也会得到相应的更改。
var clonedList = originalObservableCollection.Select(objEntity => (YourEntity) objEntity.Clone()).ToList();
ObservableCollection<YourEntity> clonedCollection = new ObservableCollection<YourEntity>(clonedList);