BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース WPF と Silverlight 向けの Undo-Redo フレームワーク

WPF と Silverlight 向けの Undo-Redo フレームワーク

原文(投稿日:2012/01/31)へのリンク

Undo と Redo は、リッチインターフェースでユーザが共通して要求するコマンドであり、実装が適切ならばアプリケーションのユーザビリティを大きく改善することができる。しかし、アプリケーション個別にゼロから機能を構築する場合、多大な時間を消費する反復作業となる恐れがある。WPFとSilverlightの開発者に対し、少なくとも二つのライブラリが存在する。近年リリースされたInfragistics が提供するUndo-Redoフレームワーク CTP版、Undoと呼ばれるとオープンソースライブラリのフレームワークである。

Multiple-Undo-Redo機能を実装する一般的な方法は、Command Patternを利用し、Undoのためにコマンドオブジェクトをスタックに確保し続けることだ。Redoを実現するには、もう一つの別スタックを用意し、Undoされたコマンドを全て保持することで実現できる。しかし、この単純な手法は以下を考慮すると複雑化し始める。

  • コレクションはプロパティと分けて取り扱う必要がある
  • 複数のコマンドは一度に取り扱う必要がある – 例) モデルのプロパティ値にバインドされたテキストボックスが存在する場合に、キーストローク毎にモデルは更新されるとしても、キーストローク毎の処理を分割して考慮したくない

この点に対し、Undoフレームワークを活用できる。Infragistics の公表で述べている通り、Infragisticsのフレームワークは幾つかの機能を提供している。これはカスタムUndo-Unitを含み、ObservableCollectionとTransaction Supportをサポートする。同様に、Kirill Osenkov氏によるUndoと呼ばれるオープンソースフレームワークが存在し、ネストされたトランザクションと処理のマージをサポートする。同フレームワークについて更に学習するには、Kirill氏の記事と同プロジェクトのドキュメントで学習することができる。

これらはリニアUndo/リデゥのフレームワークであり、非リニア/分岐 Undo(Undoしたい箇所までのUndo処理を繰り返すことなく、ユーザが任意の地点に対してUndo可能とすること)についてはサポートしていない点に留意すること。リニアUndo-Redoですらユーザエクスペリエンス上の課題をはらんでおり、特に、ユーザがUndoした際に記録を残したい場合等(例:ユーザがテキストボックスに入力してタブ移動する際、バリデーションが起動してバインドされたプロパティ値が更新されない)があげられる。

この分野では、さらなる研究が見られるだろう。 

この記事に星をつける

おすすめ度
スタイル

BT