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