web-dev-qa-db-ja.com

観察可能なコレクションをコピーする方法

私が持っています

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

この場合、両方が同じObservableCollection...を指しています...別のコピーを作成するにはどうすればよいですか?

18
Relativity

これを行う:

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

これにより、観察可能なコレクションが作成されますが、アイテムは引き続き元のアイテムを指しています。元のアイテムではなくクローンを指すアイテムが必要な場合は、クローンメソッドを実装してから呼び出す必要があります。

[〜#〜] update [〜#〜]

リストに追加しようとしたときに、監視可能なコレクションに元のリストがある場合は、元のリストを渡してObservablecollectionを作成するだけです。

List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere();
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList);
24
Aliostad

エンティティ定義に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);
10
Jaime Marín