2009-05-22 1 views
6

Как обеспечить отмену/повтор с использованием привязок в WPF?Отменить в WPF Bindings

например. Вы реализуете представление мастер-детали со связями. После редактирования ваши изменения были автоматически сохранены с использованием привязки. Затем вы хотите отменить изменения.

Есть ли что-то готовое к использованию в привязке для WPF? Предоставляет ли WPF некоторые структуры или интерфейсы?

Этот вопрос не о том, как реализовать отмену/повторное использование стеков.

ответ

5

Посмотрите на интерфейс IEditableObject. Он позволяет сделать снимок объекта, который его реализует, а затем, если необходимо, вернуться к этому снимку.

+0

Использует ли WPF интерфейс IEditableObject, т. Е. Вызывает его методы? –

+0

Это зависит от конкретного элемента управления, которым вы пользуетесь. Например, элемент управления MS DataGrid. –

1

К чему вы привязываетесь?

Если вы привязываетесь к DataSet, вы можете отменить изменения, используя метод DataSet.RejectChanges(), если вы еще не вызвали DataSet.AcceptChanges().

+0

Что касается общего связывания, т.е. к объекту, полученному из DependencyObject или привязке управления к контролу? –

+0

Как говорит Кент, если объект реализует IEditableObject, вы являетесь quids, но если нет, вам нужно сделать это вручную. –

1

Вы можете обнаружить, что Monitored Undo Framework полезен. http://muf.codeplex.com/

Он не использует командный шаблон «сверху вниз», но вместо этого отслеживает изменения по мере их возникновения и позволяет помещать делегат в стек отмены, который изменит это изменение.

В вашем случае, если вы привязываетесь к базовой модели/viewmodel, вы можете подключить фреймворк, чтобы зафиксировать эти изменения, а затем отменить/переделать их по мере необходимости. Если модель реализует INotifyPropertyChanged и использует ObservableCollections, она должна автоматически отражать действия, выполняемые на модели, включая действия отмены/повтора.

Дополнительную информацию и документацию можно найти на сайте codeplex по адресу http://muf.codeplex.com/.

 Смежные вопросы

  • Нет связанных вопросов^_^