2010-11-14 92 views
9

如何複製觀察到的集合

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

在這種情況下,都指向同一個ObservableCollection ...我如何做出不同的副本?

回答

16

這樣做:

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

這將創建一個可觀察的集合,但項目仍然會指向原來的項目。如果您需要項目指向克隆而不是原始項目,則需要實施並調用克隆方法。

UPDATE

如果您嘗試添加到列表中,然後觀察集合有原來的列表中,只是通過將原始列表創建的ObservableCollection:

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

謝謝...但我真正的問題是,我有一個觀察的集合......當我添加一個新的項目它..它不反映在用戶界面。所以我現在正在做的是將整個集合複製到temperory集合中......然後將新項目添加到temp集合中。然後分配回溫度回收。 – Relativity 2010-11-14 20:53:28

+0

我已更新。 – Aliostad 2010-11-14 20:57:42

+0

但我有可觀察的收集作爲輸入。即....我有一個可觀察的120件物品的集合..我增加了新的物品..它現在有121個物品...然後用戶界面應該顯示121個物品 – Relativity 2010-11-14 21:01:31

5

您可以實現ICloneable接口在你的實體定義中,然後製作ObservableCollection的內部演員副本。因此,您將有一個克隆List沒有任何引用舊的項目。然後,你可以創建新ObservableCollection白衣克隆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);