バージョン

UndoManager クラス

元に戻す/やり直し履歴を管理するために使用するクラス。
シンタックス
'宣言
 
Public Class UndoManager 
   Inherits Infragistics.PropertyChangeNotifier
public class UndoManager : Infragistics.PropertyChangeNotifier 
解説

UndoManager は元に戻す/やり直し履歴を管理します。使用可能なメソッドの 1 つを使用して、UndoUnit インスタンスをそれに追加することにより、元に戻す/やり直し履歴に操作を追加します。カスタムの UndoUnit 派生クラスのインスタンス、またはこのアセンブリに含まれるクラスのインスタンスを作成して AddChange(UndoUnit) メソッドを使用できます。UndoManager は UndoUnit を作成して履歴に追加する多数のヘルパー メソッドも公開しています。AddPropertyChange オーバーロードはあるオブジェクトのプロパティの変更を記録するために使用できます。AddCollectionChange オーバーロードは ICollection>T< を実装するコレクションへの変更を記録するために使用できます。残りの AddChange オーバーロードを使用して、マネージャーが元に戻す/やり直し操作を実行中に講じるべき元に戻す/やり直しアクションを表すデリゲートのセットを提供することができます。これらのメソッドは UndoUnitFactoryResolved を使用します。したがって、これらのメソッドによって作成される UndoUnit タイプを変更したい場合には、UndoUnitFactory からクラスを派生し、UndoUnitFactory プロパティをそのクラスのインスタンスに設定できます。

UndoHistoryRedoHistoryUndoHistoryItem インスタンスの読み取り専用コレクションです。UndoHistoryItem は、実行される操作を表すルートの UndoUnit だけでなく、操作の簡略な説明と詳細な説明を公開します。これらのコレクションは INotifyCollectionChanged を実装しているため、エンドユーザーに履歴を表示するメニューのソースなどとして UI で使用できます。

Undo メソッドと Redo メソッドを使用して元に戻す/やり直し操作を実行します。これらのメソッドが呼び出されると、UndoHistoryItem が関連付けられた履歴 (UndoHistory など) から削除されて、UndoHistoryItem.UnitUndoUnit.Execute メソッドが呼び出されます。デフォルトの UndoUnits は反対の履歴に自動的に移動されないことを知っておくことは重要です。たとえば、プロパティの変更を元に戻している間、プロパティの変更によって AddPropertyChange オーバーロードへの新たな呼び出しが行われることが予想されます。これにより、その変更を表す新しい UndoUnit が作成され UndoManager の履歴に追加されます。その場合、UndoManager は元に戻す操作を実行中であったため、新しい UndoUnit がやり直しの履歴に追加されます。

UndoManager は、オブジェクトの現在の状態を示す多数の読み取り専用のブール値プロパティを公開します。IsPerformingUndoIsPerformingRedo は元に戻す/やり直し操作をそれぞれ実行する間 True です。CanUndo プロパティと CanRedo プロパティは元に戻す/やり直し履歴に項目があるかどうかを示します。

個別の初期化を実行するとき、Suspend メソッドを使用して履歴で UndoUnits のログを一時的に無効にできます。Resume メソッドが呼び出されるまで AddChange へのいかなる呼び出しも無視されます。Resume メソッドを呼び出したときには、必ず同じ回数だけ Suspend メソッドを呼び出す必要があります。IsSuspended プロパティは Suspend と Resume への呼び出しの間 True を返します。

UndoManager は保存された最新の UndoUnit と新しい UndoUnit のマージに対するサポートを提供します。これは同じアクションが複数回発生する場合に役に立ちます。たとえば、Slider のつまみをドラッグする間に、Slider の Value にバインドされたプロパティ。マージは、AllowMerging を false に設定することによって無期限に無効にできます。PreventMerge メソッドを呼び出すことによって、現在の項目のマージを抑制することも可能です。

複数の操作を単一の元に戻すことが可能なアクションとして扱う必要があるときは、トランザクションを使用できます。UndoManager は、StartTransaction(String,String) メソッドを使用してトランザクションに対するサポートを提供します。これは UndoTransaction インスタンスを返します。UndoManager に追加されるそれ以降のユニットは、トランザクションがコミットされる (UndoTransaction.Commit を参照) またはロールバック (UndoTransaction.Rollback を参照) されるまでそのトランザクション内に保管されます。ネストされたトランザクションはサポートされるため、トランザクションが処理中に StartTransaction が呼び出されると CurrentTransactionUndoTransaction.Units に追加されます。RootTransaction プロパティを使用して、存在する場合には、現在のオープンなトランザクションにアクセスできます。また、トランザクション内で実行したいコードのブロックがある場合、ExecuteInTransaction(String,String,Action) メソッドを使用できます。このメソッドは、例外は発生する場合に作成するトランザクションの Rollback メソッドの呼び出しを処理します (例外が発生することを防止することなく)。そうでない場合はトランザクションの Commit を呼び出します。RootTransaction がコミットされたときに、UndoManager の現在の状態に基づいて元に戻す/やり直し履歴に追加されます。

参照