「如何实现流动式软件发布」线上课堂开课啦,快来报名参与课堂抽奖吧~ 了解详情
写点什么

WPF 和 Silverlight 的撤销和重做框架

2012 年 2 月 19 日

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

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

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

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

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

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

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

2012 年 2 月 19 日 17:391831

评论

发布
暂无评论
发现更多内容

架构师训练营 2 期 - 第九周总结

Geek_no_one

极客大学架构师训练营

架构入门感悟之九

莫问

第九章作业

Geek_9527

架构师训练营 1 期 - 第 十三周作业(vaik)

行之

极客大学架构师训练营

数据应用(二)课后练习

ABS

第十三周 作业1

Yangjing

极客大学架构师训练营

第九周大作业

小兵

架构师训练营第一期 - 第十三周课后作业

卖猪肉的大叔

极客大学架构师训练营

第十三周作业

Meow

PageRank算法

天天向上

极客大学架构师训练营

架构师训练营 Week13 - 课后作业

极客大学架构师训练营

以满天星辰为灯塔,照亮百度“大航海计划”背后的AI棋局

脑极体

架构师训练营 1 期 - 第 十三周总结(vaik)

行之

极客大学架构师训练营

第 9 周 系统架构总结

心在那片海

架构师知识体系

天天向上

极客大学架构师训练营

第四周作业

胡益

【架构师训练营 1 期】第十三周作业

诺乐

Architecture Phase1 Week13:HomeWork

phylony-lu

极客大学架构师训练营

第 9 周作业

Steven

极客大学架构师训练营

计算机的时钟(五):混合逻辑时钟

ElvinYang

【第十三周】课后作业

云龙

架构师训练营 Week13 - 数据应用(2) 总结

极客大学架构师训练营

极客时间架构 1 期:第 13 周 数据应用(二) - 学习总结

Null

极客时间架构 1 期:第 13 周 数据应用(二) - 命题作业

Null

第 9 周 系统架构作业

心在那片海

大数据技术与应用

天天向上

极客大学架构师训练营

第四周学习总结

胡益

常用数据分析指标,PageRank算法

garlic

极客大学架构师训练营

第十三周学习笔记

Meow

架构师训练营第9周 命题作业

月下独酌

极客大学架构师训练营

架构师训练营 总结9

Arthur

极客大学架构师训练营

WPF和Silverlight的撤销和重做框架-InfoQ