2009-05-22 12 views
6

WPFでバインドを使用して元に戻す/やり直しを行う方法は?WPFバインディングで元に戻す

バインディングを使用してマスター詳細ビューを実装します。編集後、変更は自動的にバインディングを使用して保存されました。次に、変更を取り消したいとします。

WPFのバインドですぐに使用できるものはありますか? WPFはいくつかの構造やインターフェイスを提供していますか?

この質問は、スタックを使用して取り消し/やり直しを実装する方法に関するものではありません。

答えて

5

IEditableObjectインターフェイスをご覧ください。それを実装するオブジェクトのスナップショットを撮り、必要に応じてそのスナップショットにロールバックすることができます。

+0

WPFはIEditableObjectインターフェイスを使用しますか?つまり、そのメソッドを呼び出しますか? –

+0

あなたが使用している特定のコントロールに依存します。たとえば、MS DataGridコントロールが行います。 –

1

あなたは何にデータバインドしていますか?

DataSetにデータバインドする場合、DataSet.AcceptChanges()をまだ呼び出さなかった場合は、DataSet.RejectChanges()メソッドを使用して変更を元に戻すことができます。

+0

一般的な結合についてはどうでしょうか? DependencyObjectまたはControl-to-Controlバインディングから派生したオブジェクトに、 –

+0

KentはオブジェクトがIEditableObjectを実装していると言っていますが、そうでない場合は手作業で行う必要があります。 –

1

Monitored Undo Frameworkが役立つ場合があります。 http://muf.codeplex.com/

"top down"コマンドパターンは使用せず、代わりに変更を監視し、変更を取り消す元に戻すスタックにデリゲートを置くことができます。

場合によっては、基になるモデル/ビューモデルにバインドする場合、これらの変更をキャプチャして必要に応じて元に戻したりやり直したりするためにフレームワークをフックアップすることができます。モデルがINotifyPropertyChangedを実装し、ObservableCollectionsを使用する場合、モデルに実行されたアクション(アンドゥ/リドゥアクションを含む)が自動的に反映されます。

詳細情報とドキュメントは、コードプレックスのサイトhttp://muf.codeplex.com/にあります。

関連する問題