我在我的应用程序中到处使用可观察集合。我的问题是,当我使用弹出窗口编辑这些实体时,当用户更改窗口中对应的字段时,我的绑定列表会发生变化。
我该如何简单地冻结可观察的更改通知,并在保存实体时才释放它们?
谢谢, Oran
我在我的应用程序中到处使用可观察集合。我的问题是,当我使用弹出窗口编辑这些实体时,当用户更改窗口中对应的字段时,我的绑定列表会发生变化。
我该如何简单地冻结可观察的更改通知,并在保存实体时才释放它们?
谢谢, Oran
ObservableCollection
会引发事件,而不是当项目的属性更改时。这部分由项目实现的INotifyPropertyChanged
处理,因此需要禁用此通知。IEditableObject
接口,该接口专为此类情况设计。您可以在BeginEdit
方法中禁用通知,并在EndEdit
和CancelEdit
中重新启用它们。
编辑:Paul Stovell在这里提供了一个很好的IEditableObject
包装器实现:
http://www.paulstovell.com/editable-object-adapter
您可以使用:
BoundPropertyOfViewModel = CollectionViewSource.GetDefaultView(AgentDeploymentDetail);
而不是直接绑定到ObservableCollection,应该将其绑定到视图上。这是同一个对象,允许您在不触及集合的情况下对输出进行过滤/排序。
当您想要停止更改时,请使用DeferRefresh()
。完成后,请调用Refresh()
。
警告
这不会阻止每个项目本身的更改显示,只会影响列表。
以上所有答案都很好。但我发现了一种高效且清晰的方法来执行所需操作。它基于对分离对象进行深度复制,使用Matthieu MEZIL实体克隆器(http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx)。
有关完整详细信息,请查看以下内容:Entity Framework Attach Exception After Clone
感谢所有的支持...