Режим редактирования 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
Спасибо за все большое поддержка...