深层复制对象
本文关键字:对象 复制 | 更新日期: 2023-09-27 18:00:14
我想在Windows Phone 8.1平台上深度复制一个集合(其中包含复杂对象和其他集合(。最好的解决方案是什么?
注意:我读到"最简单"(最短(的方式是这样的:
List<MyClass> copiedObject =
JsonConvert.DeserializeObject<List<MyClass>>(
JsonConvert.SerializeObject(originalObject)
);
但是如果我使用它,我的 ObservableCollections 将不再工作,所以如果我将复制的集合绑定到 UI 元素,它在我更改集合中的某些内容后不会更新。
所以我的"附带问题"是:为什么我的收藏会"损坏"?
捆绑:
<Pivot.ItemTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding EventList}"/>
</DataTemplate>
</Pivot.ItemTemplate>
包含 EventList 属性的类应实现 INotifyPropertyChanged 接口。
public class PageContext : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection _eventList;
protected void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName)));
}
}
public ObservableCollection EventList
{
get { return _eventList; }
set
{
if (value.Equals(_eventList)) return;
_eventList = value;
OnPropertyChanged("EventList");
}
}
}
首次绑定时,UI 控件将存储对集合的引用,并观察它是否有新的更改。之后,创建一个新集合并将其分配给 EventList 属性,但不通知 UI 控件集合已更改。
另一种选择不是创建一个 新ObservableCollection
,而是清空现有的一个,然后逐个添加副本中的每个元素。