Использование контекста редактирования ModelItem
Контекст редактирования ModelItem является объектом, используемым ведущим приложением для взаимодействия с конструктором. EditingContext предоставляет два метода, Items и Services, которые могут использоваться
Коллекция элементов
Коллекция Items служит для доступа к данным, совместно используемым ведущим приложением и конструктором, либо к данным, доступным для всех конструкторов. Эта коллекция имеет следующие возможности, доступ к которым осуществляется через класс ContextItemManager:
Коллекция служб
Коллекция Services предназначена для доступа к службам, используемым конструктором для взаимодействия с узлом, либо к службам, используемым всеми конструкторами. Эта коллекция содержит следующие методы, на которые нужно обратить внимание:
Назначение конструктора действию
Чтобы указать, какой конструктор используется действием, служит атрибут 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 - определяет коллекцию выбранных в настоящий момент объектов.
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 - служит для регистрации и отмены регистрации делегатов для уведомления о событиях. Кроме того, позволяет задавать владельца окна.