WPF和Silverlight的撤销和重做框架

60 篇文章 2 订阅

用户经常期待富界面里包含撤销和重做两个命令,如果实现得好,可以极大地改善应用程序的可用性。但是,为每个应用程序从头构建这些功能很费时间,还会导致重复劳动。目前至少有两个库可以在这方面帮助WPF和Silverlight开发者——Infragistics最近宣布的撤销和重做框架(CTP)以及开源的Undo库。

实现多次撤销和重做功能的常见办法是使用命令模式,通过一个堆栈保存一组撤销命令对象。对于重做,可以通过另一个堆栈保存所有撤销过的命令。但是,当你把下列因素考虑进来时,这个简单的技术很快就会变得复杂:

  • 集合和属性需要分开处理。

  • 多个命令可能是串在一起的,比如说,如果你有一个文本框绑到一个模型的属性,你不想每个击键都被看做一个独立的操作,即使这个模型会在每次击键的时候更新。

这个时候撤销框架就可以派上用场了。Infragistics的框架在他们的声明里提到了若干特性,包括自定义撤销单元、支持ObservableCollection和事务。类似的,Kirill Osenkov写了一个叫Undo的开源框架,支持嵌套事务和操作合并。你可以通过Kirill的文章和项目文档里深入了解这个框架。

注意,这些都是线性撤销和重做框架,它们不支持非线性和分支撤销(即用户可以有选择性地撤销之前的任何操作,而不必撤销从那之后的所有东西)。线性撤销和重做情景也有用户体验方面的挑战,尤其在用户期望撤销某些东西,而那些东西却没被记录下来(比如,用户在一个文本框里输入,突然按Tab键离开,此时验证无法通过,绑定的属性没有更新)。

希望以后我们能够看到更多这方面的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值