我正在开发一个 Silverlight LoB 应用程序,设计师希望它有一个选项卡式界面,类似于 Visual Studio 的界面(我们可能会使用 Telerik Rad 控件来停靠选项卡)。完成原型后,界面到目前为止运行良好,但我在思考如何在 MVVM 项目中实现撤消/重做功能时遇到问题。
撤消/重做功能必须:
- 在撤消/重做时,恢复 UI 状态,即将焦点、选择等返回到更改所源自的控件(例如文本框)。
- 有一个按视图撤消/重做堆栈
通常,我会使用命令模式,但我不确定如何将其应用于 MVVM。
我使用命令和绑定来获得视图和视图模型的理想化松散耦合,但它使撤消/重做变得更加棘手,因为视图模型没有任何视图和状态的概念收到命令或更改绑定属性时的视图。似乎我需要某种服务跟踪,只要用户执行一些可撤消的操作并获取状态以供以后恢复,该视图就处于活动状态。
对于在 MVVM 中实施撤消/重做的最佳实践是否有任何共识?我对 Daniel Vaughan 在他的 Calcium 项目中如何做到这一点很感兴趣。Blend 显然是使用 MVVM 模式编写的,它的行为就像我希望我的应用程序那样,如果 MS 解释他们是如何做到的,那就太好了!