我正在开发一个Silverlight LoB应用程序,设计师想要一个类似于Visual Studio的选项卡界面(我们可能会使用Telerik Rad控件来停靠选项卡)。经过原型测试,界面目前运行良好,但我在思考如何在MVVM项目中实现撤销/重做功能时遇到了问题。
撤销/重做功能必须:
1. 在撤销/重做时,恢复UI状态,即将焦点、选择等返回到更改源(例如文本框)的控件。 2. 拥有每个视图的撤销/重做堆栈。
通常,我会使用命令模式,但我不确定如何在MVVM中应用它。
我已经使用命令和绑定来获得理想的视图和视图模型的松耦合,但这使得撤销/重做变得更加棘手,因为视图模型没有任何关于视图的概念,也不知道在接收命令或更改绑定属性时视图的状态。似乎我需要一些服务来跟踪用户执行可撤销操作时哪个视图处于活动状态,并获取其状态以供稍后恢复。
在MVVM中实现撤销/重做的最佳实践是否有共识?我对Daniel Vaughan在他的Calcium项目中如何实现感到感兴趣;据说Blend是使用MVVM模式编写的,它的行为就像我想要的应用程序,如果微软能解释一下他们是如何做到的那就太好了!
撤销/重做功能必须:
1. 在撤销/重做时,恢复UI状态,即将焦点、选择等返回到更改源(例如文本框)的控件。 2. 拥有每个视图的撤销/重做堆栈。
通常,我会使用命令模式,但我不确定如何在MVVM中应用它。
我已经使用命令和绑定来获得理想的视图和视图模型的松耦合,但这使得撤销/重做变得更加棘手,因为视图模型没有任何关于视图的概念,也不知道在接收命令或更改绑定属性时视图的状态。似乎我需要一些服务来跟踪用户执行可撤销操作时哪个视图处于活动状态,并获取其状态以供稍后恢复。
在MVVM中实现撤销/重做的最佳实践是否有共识?我对Daniel Vaughan在他的Calcium项目中如何实现感到感兴趣;据说Blend是使用MVVM模式编写的,它的行为就像我想要的应用程序,如果微软能解释一下他们是如何做到的那就太好了!