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