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


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

Контекст редактирования ModelItem является объектом, используемым ведущим приложением для взаимодействия с конструктором. EditingContext предоставляет два метода, Items и Services, которые могут использоваться

Коллекция элементов

Коллекция Items служит для доступа к данным, совместно используемым ведущим приложением и конструктором, либо к данным, доступным для всех конструкторов. Эта коллекция имеет следующие возможности, доступ к которым осуществляется через класс ContextItemManager:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

Коллекция служб

Коллекция Services предназначена для доступа к службам, используемым конструктором для взаимодействия с узлом, либо к службам, используемым всеми конструкторами. Эта коллекция содержит следующие методы, на которые нужно обратить внимание:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Назначение конструктора действию

Чтобы указать, какой конструктор используется действием, служит атрибут Designer.

[Designer(typeof(MyClassDesigner))]  
public sealed class MyClass : CodeActivity  
{
}

Создание службы

Чтобы создать службу, которая служит каналом передачи между конструктором и узлом, необходимо создать интерфейс и реализацию. Этот интерфейс используется методом Publish для определения элементов службы, и реализация содержит логику для этой службы. В следующем примере кода создаются интерфейс службы и реализация.

public interface IMyService  
    {  
        IEnumerable<string> GetValues(string DisplayName);  
    }  
  
    public class MyServiceImpl : IMyService  
    {  
        public IEnumerable<string> GetValues(string DisplayName)  
        {  
            return new string[]  {
                DisplayName + " One",
                DisplayName + " Two",  
                "Three " + DisplayName  
            } ;  
        }  
    }  

Публикация службы

Чтобы конструктор мог использовать службу, ее сначала необходимо опубликовать на узле с помощью метода Publish.

this.Context.Services.Publish<IMyService>(new MyServiceImpl);  

Подписка на службу

Конструктор получает доступ к службе с помощью метода Subscribe в методе OnModelItemChanged. В следующем фрагменте кода показана подписка на службу.

protected override void OnModelItemChanged(object newItem)  
{  
    if (!subscribed)  
    {  
        this.Context.Services.Subscribe<IMyService>(  
            servInstance =>  
            {  
                listBox1.ItemsSource = servInstance.GetValues(this.ModelItem.Properties["DisplayName"].ComputedValue.ToString());  
            }  
            );  
        subscribed = true;
    }  
}  

Совместное использование данных с помощью коллекции элементов

Работа с коллекцией элементов похожа на работу с коллекцией служб, за исключением того, что вместо Publish вызывается SetValue. Эта коллекция больше подходит для обмена простыми данными между конструкторами и узлом, чем для выполнения сложных функций.

Ведущие элементы узла EditingContext и службы

Платформа .NET Framework предоставляет ряд встроенных элементов и служб, доступных через контекст редактирования.

Элементы:

  • AssemblyContextControlItem - управляет списком локальных сборок, на которые указывают ссылки и которые будут использоваться в рабочем процессе для элементов управления (например, в редакторе выражений).

  • ReadOnlyState - указывает, находится ли конструктор в режиме только для чтения.

  • Selection - определяет коллекцию выбранных в настоящий момент объектов.

  • WorkflowCommandExtensionItem:

  • WorkflowFileItem - предоставляет сведения о файле, на основе которого выполняется текущий сеанс редактирования.

Сервисы.

  • AttachedPropertiesService - позволяет добавлять свойства в текущий экземпляр с помощью AddProperty.

  • DesignerView - разрешает доступ к свойствам полотна конструктора.

  • IActivityToolboxService - позволяет обновлять содержимое области элементов.

  • ICommandService - предназначен для интеграции команд конструктора (например, пунктов контекстного меню) с пользовательскими реализациями службы.

  • IDesignerDebugView - обеспечивает функциональность отладчика конструктора.

  • IExpressionEditorService - обеспечивает доступ к диалоговому окну редактора выражений.

  • IIntegratedHelpService - реализует в конструкторе функциональность встроенной справки.

  • IValidationErrorService - обеспечивает доступ к ошибкам проверки через ShowValidationErrors.

  • IWorkflowDesignerStorageService - реализует внутреннюю службу для хранения и извлечения данных. Эта служба используется внутренне платформа .NET Framework и не предназначена для внешнего использования.

  • IXamlLoadErrorService - предоставляет доступ к коллекции ошибок загрузки XAML через ShowXamlLoadErrors.

  • ModelService - используется конструктором для взаимодействия с редактируемой моделью рабочего процесса.

  • ModelTreeManager - обеспечивает доступ к корневому элементу дерева элементов модели через Root.

  • UndoEngine - реализует функциональность отмены и повтора операций.

  • ViewService - сопоставляет визуальные элементы с элементами базовой модели.

  • ViewStateService - сохраняет состояния представления для элементов модели.

  • VirtualizedContainerService - используется для настройки поведения пользовательского интерфейса виртуального контейнера.

  • WindowHelperService - служит для регистрации и отмены регистрации делегатов для уведомления о событиях. Кроме того, позволяет задавать владельца окна.