Jam*_*sCo 5 silverlight prism telerik mvvm undo-redo
我正在开发一个Silverlight LoB应用程序,设计人员希望它有一个标签界面,类似于Visual Studio的界面(我们可能会使用Telerik Rad控件进行对接选项卡).完成原型后,界面到目前为止运行良好,但我在思考如何在MVVM项目中实现撤消/重做功能时遇到了问题.
撤消/重做功能必须:
通常,我会使用命令模式,但我不确定如何将其应用于MVVM.
我已经使用命令和绑定来获得视图和视图模型的理想松散耦合,但它使撤消/重做变得更加棘手,因为视图模型没有任何视图概念和状态收到命令或绑定属性更改时的视图.似乎我需要某种服务跟踪,只要用户执行一些可撤消操作并获得状态以便以后恢复,哪个视图就处于活动状态.
对MVVM中实现撤消/重做的最佳实践有什么共识?我非常感兴趣地看看丹尼尔沃恩在他的钙项目中如何做到这一点; Blend显然是使用MVVM模式编写的,它的行为就像我想要的应用程序一样,如果MS解释他们是如何做到的,那就太棒了!
您需要做的第一件事是确保将操作与界面完全分开。这意味着将所有影响数据的操作转变为离散的操作。这也意味着无论什么导致观点改变也应该被记录为一个离散的行动。基本上,界面的状态应该只反映数据更改和基于命令的视图更改(请参阅下面关于视图更改的最后一条注释)。
我们以前使用过的最成功的撤消系统允许嵌套 IUndoableCommand 对象。这些复合命令汇总为单个用户操作(您希望在“撤消”菜单中看到显示的操作类型)。
我注意到您提到在视图之间使用撤消...这对于多形式应用程序来说似乎是不寻常的行为。通常撤消仅在单个控件内以及任何拖放操作中进行。例外情况通常是基于图形的界面(不是基于表单的)。在撤消过程中更改形式相当于 MS Word 切换到另一个文档并继续撤消...对于最终用户来说相当令人不安。可能想让用户体验人员重新考虑设计的这方面。只值我的2美分。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3701 次 |
| 最近记录: |