Поделиться через


Использование области редактирования

В примере UsingEditingScope показано, как пакетировать набор изменений, чтобы их можно было отменить в одной атомарной единице. По умолчанию действия, выполняемые автором конструктора действий, автоматически интегрируются в систему отмены или повтора.

Демонстрирует

Область редактирования и отмена и повтор.

Обсуждение

В этом примере показано, как группировать набор изменений в дереве в рамках одной операции. Обратите внимание, что при привязке к ModelItem значениям непосредственно из конструктора WPF изменения применяются автоматически. В этом примере показано, что необходимо сделать при пакетном выполнении нескольких изменений с помощью императивного кода, а не одного изменения.

В этом примере добавляются три действия. При начале BeginEdit редактирования вызывается экземпляр ModelItem. Изменения, внесенные ModelItem в дерево в этой области редактирования, группируются. Команда BeginEdit возвращает EditingScope, который можно использовать для управления этим экземпляром. Можно вызвать либо OnComplete, либо OnRevert для фиксации или отмены изменений в области редактирования.

Можно также вкладывать объекты EditingScope, что позволяет отслеживать несколько наборов изменений в рамках более широкой области редактирования и управлять ими по отдельности. Сценарий, который может использовать эту функцию, будет происходить, если изменения из нескольких диалогов должны быть зафиксированы или отменены отдельно, при этом все изменения рассматриваются как одна атомарная операция. В этом примере области редактирования накладываются друг на друга с помощью ObservableCollection<T> типа ModelEditingScope. Элемент ObservableCollection<T> используется для того, чтобы глубина вложения могла наблюдаться на поверхности конструктора.

Настройка, сборка и запуск примера

  1. Создайте и запустите пример, а затем нажмите кнопки слева для изменения рабочего процесса.

  2. Нажмите кнопку "Открыть область редактирования".

    1. Эта команда вызывает BeginEdit, которая создает область редактирования и помещает ее в стек редактирования.

    2. Затем в выбранный элемент ModelItem добавляются три действия. Обратите внимание, что, если область редактирования с BeginEdit не была открыта, на холсте дизайнера появятся три новые активности. Так как эта операция по-прежнему ожидается в пределах конструктора EditingScope, конструктор еще не обновлен.

  3. Нажмите кнопку "Закрыть область редактирования" , чтобы зафиксировать область редактирования. В конструкторе отображаются три активности.