我想在windows 8.1平台上深入复制一个集合(其中包含复杂的对象和其他集合)。什么是最好的解决办法?
注意:我读到“最简单”(最短)的方式是这样的:
List<MyClass> copiedObject =
JsonConvert.DeserializeObject<List<MyClass>>(
JsonConvert.SerializeObject(originalObject)
);但是如果我使用它,我的ObservableCollections就不能工作了,所以如果我将复制的集合绑定到UI元素,那么在更改集合中的某些内容之后,它就不会被更新。
所以我的“侧面问题”是:为什么我的收藏会“被破坏”?
具有约束力:
<Pivot.ItemTemplate>
<DataTemplate>
<ListView ItemsSource="{Binding EventList}"/>
</DataTemplate>
</Pivot.ItemTemplate>发布于 2015-06-27 07:59:51
包含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,而是清空一个现有的元素,然后逐个添加副本中的每个元素。
https://stackoverflow.com/questions/31083479
复制相似问题