BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

WPF和Silverlight的撤销和重做框架

| 作者 Roopesh Shenoy 关注 0 他的粉丝 ,译者 李永伦 关注 0 他的粉丝 发布于 2012年2月20日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

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

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

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

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

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

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

查看英文原文:Undo-Redo Frameworks For WPF and Silverlight

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

撤销和重做 by hu shibo

CSLA好像也支持Undo/Redo。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT