首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深拷贝对象

深拷贝对象
EN

Stack Overflow用户
提问于 2015-06-26 23:14:34
回答 1查看 465关注 0票数 1

我想在windows 8.1平台上深入复制一个集合(其中包含复杂的对象和其他集合)。什么是最好的解决办法?

注意:我读到“最简单”(最短)的方式是这样的:

代码语言:javascript
复制
List<MyClass> copiedObject = 
  JsonConvert.DeserializeObject<List<MyClass>>(
      JsonConvert.SerializeObject(originalObject)
   );

但是如果我使用它,我的ObservableCollections就不能工作了,所以如果我将复制的集合绑定到UI元素,那么在更改集合中的某些内容之后,它就不会被更新。

所以我的“侧面问题”是:为什么我的收藏会“被破坏”?

具有约束力:

代码语言:javascript
复制
<Pivot.ItemTemplate> 
   <DataTemplate> 
      <ListView ItemsSource="{Binding EventList}"/> 
   </DataTemplate>
</Pivot.ItemTemplate>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-27 07:59:51

包含EventList属性的类应该实现INotifyPropertyChanged接口。

代码语言:javascript
复制
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,而是清空一个现有的元素,然后逐个添加副本中的每个元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31083479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档