Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何复制可观察集合_Wpf_Copy_Observablecollection - Fatal编程技术网

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);