BT

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

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 勇 大地 フォローする 1 人のフォロワー 投稿日 2012年2月5日. 推定読書時間: 2 分 |

原文(投稿日: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した際に記録を残したい場合等(例:ユーザがテキストボックスに入力してタブ移動する際、バリデーションが起動してバインドされたプロパティ値が更新されない)があげられる。

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

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT