Как реализовать отмену / повтор в приложении MVVM?

Я работаю над приложением Silverlight LoB, дизайнеры которого хотят иметь интерфейс с вкладками, похожий на интерфейс Visual Studio (мы Возможно, я буду использовать элементы управления Telerik Rad для вкладок стыковки). Сделав прототип, интерфейс работает хорошо, но у меня возникают проблемы с размышлениями о том, как реализовать функциональность отмены / восстановления в проекте MVVM.

Функция отмены / возврата должна:

  1. При отмене / восстановлении восстановить состояние пользовательского интерфейса, то есть вернуть фокус, выбор и т. д. элемент (ы) (например, текстовое поле) что изменение произошло из-за.
  2. Наличие стека отмен / повторов для каждого просмотра

Как правило, я бы использовал шаблон команды, но я не уверен, как применить это с MVVM.

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

Есть ли консенсус в отношении того, что является наилучшей практикой для реализации отмены / повтора в MVVM? Я с интересом посмотрел, как Даниэль Воган делает это в своем проекте «Кальций»; Очевидно, Blend был написан с использованием шаблона MVVM, и он ведет себя так, как я хочу, чтобы мое приложение, было бы здорово, если бы MS объяснила, как они это сделали!

5
задан JamesCo 25 August 2010 в 16:01
поделиться