将ObservableCollection复制到另一个ObservableCollection
如何将ObservableCollection
项复制到另一个ObservableCollection
而不引用第一个集合? 这里ObservableCollection
项值更改影响两个集合。
码
private ObservableCollection _AllMetalRate = new ObservableCollection(); private ObservableCollection _MetalRateOnDate = new ObservableCollection(); public ObservableCollection AllMetalRate { get { return this._AllMetalRate; } set { this._AllMetalRate = value; NotifyPropertyChanged("MetalRate"); } } public ObservableCollection MetalRateOnDate { get { return this._MetalRateOnDate; } set { this._MetalRateOnDate = value; NotifyPropertyChanged("MetalRateOnDate"); } } foreach (var item in MetalRateOnDate) AllMetalRate.Add(item);
造成这种情况的原因是什么?如何解决?
在将item
添加到AllMetalRate
之前,需要克隆item
引用的对象,否则两个ObservableCollections
都将引用同一个对象。 在RateModel
上实现ICloneable
接口以返回一个新对象,并在调用Add
之前调用Clone
:
public class RateModel : ICloneable { ... public object Clone() { // Create a new RateModel object here, copying across all the fields from this // instance. You must deep-copy (ie also clone) any arrays or other complex // objects that RateModel contains } }
在添加到AllMetalRate
之前克隆:
foreach (var item in MetalRateOnDate) { var clone = (RateModel)item.Clone(); AllMetalRate.Add(clone); }