WPF ObservableCollection编辑模式

时间:2010-10-25 12:05:53

标签: wpf wpf-controls binding

我在我的应用程序周围使用可观察的集合。我的问题是,当我使用弹出窗口编辑这些实体时,当用户更改窗口中的相应字段时,我的绑定列表会发生变化。

我怎样才能简单地冻结可观察的变更规范,并仅在保存实体时才释放它们?

谢谢, 奥兰

4 个答案:

答案 0 :(得分:5)

我认为问题不在于收藏,而在于实体本身。 ObservableCollection在添加或删除项目时引发事件,而不是在项目的属性发生更改时引发。此部分由项目实施的INotifyPropertyChanged处理,因此您需要禁用此通知。

我建议您查看专为此类场景设计的IEditableObject界面。您可以在BeginEdit方法中停用通知,并在EndEditCancelEdit中重新启用它们。


编辑:Paul Stovell在这里有一个很好的IEditableObject包装器实现: http://www.paulstovell.com/editable-object-adapter

答案 1 :(得分:3)

您可以使用:

  BoundPropertyOfViewModel = CollectionViewSource.GetDefaultView(AgentDeploymentDetail);

并绑定到视图而不是直接绑定到ObservableCollection。这个对象允许您在不触及集合的情况下对输出进行过滤/排序。

如果要停止更改,请使用DeferRefresh()。完成后,请致电Refresh()

警告

这不会影响每个项目本身的变化,只显示列表。

答案 2 :(得分:2)

您可以制作要编辑的对象的deep copy。这样,您可以在编辑时对副本执行操作,而不会干扰列表中保留的原始文件。完成编辑后,您可以通过编辑的版本或回滚替换原始文件。

答案 3 :(得分:0)

上面的所有答案都很棒。但是我找到了一个很好的,有意义的,以高效和干净的方式完成所需的工作。它基于使用Matthieu MEZIL实体克隆器(http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx)对分离的对象执行深层复制。

有关详细信息,请查看以下内容:Entity Framework Attach Exception After Clone

感谢所有人的大力支持......