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