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