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