私が持っています
Observablecollection<A> aRef = new Observablecollection<A>();
bRef = aRef();
この場合、両方が同じObservableCollection
...を指しています...別のコピーを作成するにはどうすればよいですか?
これを行う:
// aRef being an Observablecollection
Observablecollection<Entity> bRef = new Observablecollection<Entity>(aRef);
これにより、観察可能なコレクションが作成されますが、アイテムは引き続き元のアイテムを指しています。元のアイテムではなくクローンを指すアイテムが必要な場合は、クローンメソッドを実装してから呼び出す必要があります。
[〜#〜] update [〜#〜]
リストに追加しようとしたときに、監視可能なコレクションに元のリストがある場合は、元のリストを渡してObservablecollectionを作成するだけです。
List<Entity> originalEnityList = GetThatOriginalEnityListFromSomewhere();
Observablecollection<Entity> bRef = new Observablecollection<Entity>(originalEnityList);
エンティティ定義に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);