0

我有一个类BaseClass( ObservableCollection1<BaseClass>) 的可观察集合,它实现INotifyPropertyChanged和属性在发生变化时引发事件。我想将调用数据库时得到的默认值存储在另一个可观察的集合(ObservableCollection2<BaseClass>)中。我的视图绑定到ObervableCollection1而不是 2 但如果 发生变化BaseClass,则值会在 1 和 2 中更新,因为INotifyPropertyChangedon BaseClass,如何避免第二个ObservableCollection2<BaseClass>被更新为新值?

4

1 回答 1

0

深拷贝是关键,你要做的就是让你的 BaseClass 实现 ICloneable 接口,然后添加复制对象所需的所有逻辑。您可以使用二进制序列化深度复制对象。

因此,首先,您的类必须标记为 [Serializable] 才能使其正常工作。

[Serializable]
    public class BaseClass: ICloneable
    {
        /*
        Base Class Mumbers ...
        */

        public object Clone()
        {
            var bf = new BinaryFormatter();
            using (Stream str = new MemoryStream())
            {
                bf.Serialize(str, this);
                str.Seek(0, SeekOrigin.Begin);
                return bf.Deserialize(str);
            }
        }
    }

最后复制您的源集合

var copiedCollection = new ObservableCollection<BaseClass>(sourceCollection.Select(a => (BaseClass)a.Clone()));
于 2013-08-15T18:42:36.250 回答