c# - 将 ObservableCollection 复制到另一个 ObservableCollection

标签 c# mvvm

如何复制ObservableCollection项目到另一个 ObservableCollection没有引用第一个集合?这里ObservableCollection影响两个集合的项目值更改。

代码

private ObservableCollection<RateModel> _AllMetalRate = new ObservableCollection<RateModel>();
private ObservableCollection<RateModel> _MetalRateOnDate = new ObservableCollection<RateModel>();

public ObservableCollection<RateModel> AllMetalRate
{
    get { return this._AllMetalRate; }
    set
    {
        this._AllMetalRate = value;
        NotifyPropertyChanged("MetalRate");
    }
}

public ObservableCollection<RateModel> MetalRateOnDate
{
    get { return this._MetalRateOnDate; }
    set
    {
        this._MetalRateOnDate = value;
        NotifyPropertyChanged("MetalRateOnDate");
    }
}

foreach (var item in MetalRateOnDate)
    AllMetalRate.Add(item);

是什么原因造成的,我该如何解决?

最佳答案

您需要克隆 item 引用的对象在添加到 AllMetalRate 之前, 否则都是 ObservableCollections将引用同一个对象。实现 ICloneable RateModel上的界面返回一个新对象,并调用 Clone在您调用 Add 之前:

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 (i.e. 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);
}

关于c# - 将 ObservableCollection 复制到另一个 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018277/

相关文章:

c# - 错误 : 22001: value too long for type character varying(255)

c# - System.Byte[*] 是什么类型

c# - 为什么 C# 不能正确绑定(bind)泛型覆盖方法?

c# - WPF隐藏和显示按钮取决于datacontext的值

c# - wpf/mvvm - 如何制作一个组合框,从 mvvm 中的选定项目中设置特定值

.net - 如何在 MVVM WPF 应用程序中向父 View 通知 subview 事件?

c# - 在文本框控件中添加标签

c# - 如何在类中包含 "Empty"常量

c# - 使用 CollectionViewSource 在数据网格上进行分组的问题

c# - 如何使用 Caliburn.Micro 制作导航服务?