避免在第二个集合中使用NotifyPropertyChanged

时间:2013-08-15 15:25:59

标签: c# wpf xaml

我有一个可观察的类BaseClassObservableCollection1<BaseClass>)的集合,它实现INotifyPropertyChanged和属性当某些内容发生变化时提升事件。我想在我对另一个可观察集合(ObservableCollection2<BaseClass>)的数据库调用中存储我的默认值。我的视图绑定到ObervableCollection1而不是2,但如果BaseClass中的某些内容发生变化,则由于INotifyPropertyChanged上的BaseClass,值会在1和2中更新,怎么能我避免使用新值更新第二个ObservableCollection2<BaseClass>吗?

1 个答案:

答案 0 :(得分: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()));