Режим редактирования WPF ObservableCollection

Я использую наблюдаемые коллекции вокруг моих приложений. Моя проблема в том, что когда я использую всплывающее окно для редактирования этих объектов, мои связанные списки изменяются, когда пользователь изменяет соответствующие поля в окне.

Как я мог просто заморозить наблюдаемые изменения и освободить их только тогда, когда сущность будет сохранена?

спасибо, Оран!--1-->

4 ответов


вы могли бы сделать глубокая копия объекта, который вы хотите редактировать. Таким образом, вы можете воздействовать на копию во время редактирования, не вмешиваясь в оригинал, который остается в списке. После завершения редактирования вы можете заменить оригинал отредактированной версией или откатом.


Я думаю, что проблема не в коллекции, а в самих сущностях. ObservableCollection вызывает событие при добавлении или удалении элемента, а не при изменении свойства элемента. Эта часть обрабатывается INotifyPropertyChanged реализовано элементом, поэтому это уведомление вам нужно отключить.

Я предлагаю вам взглянуть на IEditableObject интерфейс, который предназначен для такого рода сценария. Вы можете отключить уведомления в BeginEdit метод, и восстановить их в EndEdit и CancelEdit.


правка: Павел Stovellбыл имеет приятный реализации IEditableObject фантик здесь : http://www.paulstovell.com/editable-object-adapter


вы можете использовать:

  BoundPropertyOfViewModel = CollectionViewSource.GetDefaultView(AgentDeploymentDetail);

и привязка к представлению вместо привязки непосредственно к ObservableCollection. Это тот же объект, который позволяет фильтровать/сортировать вывод, не касаясь коллекции.

Если вы хотите остановить изменения, используйте DeferRefresh(). Когда закончите, позвоните Refresh().

предупреждение

Это не первент, показывающие изменения в каждый элемент сам, только список.


все anwers выше велики. но я нашел хороший и convinent prodedure для того чтобы выполнить пожеланное в эффективном и чистом путе. Он основан на выполнении глубокой копии на отдельном объекте, используя клонер сущности Matthieu MEZIL (http://msmvps.com/blogs/matthieu/archive/2008/05/31/entity-cloner.aspx).

для получения полной информации, пожалуйста, проверьте следующие:Entity Framework Присоединить Исключение После Clone

Спасибо за все большое поддержка...