UsingEditingScope サンプルでは、変更のセットをバッチ処理して、1 つのアトミック単位で元に戻すことができるようにする方法を示します。 既定では、アクティビティ デザイナーの作成者が実行したアクションは、元に戻す/やり直しシステムに自動的に統合されます。
対象
スコープの編集と元に戻す、やり直す。
議論
このサンプルでは、1 つの作業単位内で ModelItem ツリーに対する一連の変更をバッチ処理する方法を示します。 WPF デザイナーから直接 ModelItem 値にバインドすると、変更が自動的に適用されることに注意してください。 このサンプルでは、バッチ処理する複数の変更が 1 つの変更ではなく命令型コードを使用して行われている場合に実行する必要がある操作を示します。
このサンプルでは、3 つのアクティビティが追加されています。 編集が開始されると、ModelItemのインスタンスでBeginEditが呼び出されます。 この編集スコープ内で ModelItem ツリーに加えられた変更はバッチ処理されます。 BeginEdit コマンドは、このインスタンスを制御するために使用できるEditingScopeを返します。 OnCompleteまたはOnRevertを呼び出して、編集スコープをコミットまたは元に戻すことができます。
EditingScopeオブジェクトを入れ子にすることもできます。これにより、複数の変更セットを大規模な編集スコープの一部として追跡でき、個別に制御できます。 この機能を使用する可能性があるシナリオは、複数のダイアログからの変更を個別にコミットまたは元に戻す必要があり、すべての変更が 1 つのアトミック操作として扱われる場合です。 このサンプルでは、編集スコープは、ModelEditingScope型のObservableCollection<T>を使用してスタックされます。 ObservableCollection<T>は、デザイナー画面で入れ子の深さを確認するために使用されます。
サンプルを設定、ビルド、実行するには
サンプルをビルドして実行し、左側のボタンを使用してワークフローを変更します。
[ 編集範囲を開く] をクリックします。
このコマンドは、編集スコープを作成して編集スタックにプッシュする BeginEdit を呼び出します。
その後、選択した ModelItemに 3 つのアクティビティが追加されます。 編集スコープが BeginEditで開かれていた場合は、デザイナー キャンバスに 3 つの新しいアクティビティが表示されることに注意してください。 この操作は EditingScope内でまだ保留中であるため、デザイナーはまだ更新されていません。
編集範囲を閉じるを押して編集範囲をコミットします。 デザイナーに 3 つのアクティビティが表示されます。
.NET