Режим редактирования WPF ObservableCollection - PullRequest
8 голосов
/ 25 октября 2010

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

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

Спасибо, Оран

Ответы [ 4 ]

5 голосов
/ 25 октября 2010

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

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


РЕДАКТИРОВАТЬ: Paul Stovell имеет хорошую реализацию оболочки IEditableObject здесь: http://www.paulstovell.com/editable-object-adapter

3 голосов
/ 25 октября 2010

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

  BoundPropertyOfViewModel = CollectionViewSource.GetDefaultView(AgentDeploymentDetail);

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

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

ПРЕДУПРЕЖДЕНИЕ

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

2 голосов
/ 25 октября 2010

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

0 голосов
/ 31 октября 2010

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

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

Спасибо всем за поддержку ...

...