Utilizar el contexto de edición de ModelItem
El contexto de edición de ModelItem es el objeto que la aplicación host usa para comunicarse con el diseñador. EditingContext expone dos métodos, Items y Services, que se pueden usar.
La colección Items
La colección Items se utiliza para tener acceso a los datos que se comparten entre el host y el diseñador, o a los datos disponibles para todos los diseñadores. Esta colección tiene las siguientes capacidades, cuyo acceso se obtiene a través de la clase ContextItemManager:
La colección Services
La colección Services se utiliza para tener acceso a los servicios que el diseñador utiliza para interactuar con el host, o a los servicios que todos los diseñadores utilizan. Esta colección tiene los siguientes métodos reseñables:
Asignar una actividad a un diseñador
Para especificar qué diseñador utiliza una actividad, se usa el atributo Designer.
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
Crear un servicio
Para crear un servicio que actúa como conducto de información entre el diseñador y el host, se deben crear una interfaz y una implementación. La interfaz la utiliza el método Publish para definir los miembros del servicio y la implementación contiene la lógica para el servicio. En el ejemplo de código siguiente, se crean una interfaz y una implementación de servicio.
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
} ;
}
}
Publicar un servicio
Para que un diseñador utilice un servicio, primero debe ser publicado por el host mediante el método Publish.
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
Suscribirse a un servicio
El diseñador obtiene acceso al servicio utilizando el método Subscribe en el método OnModelItemChanged. El fragmento de código siguiente muestra cómo suscribirse a un servicio.
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;
}
}
Compartir datos utilizando la colección Items
El uso de la colección Items es similar al de la colección Services, salvo que se usa SetValue en lugar de Publish. Esta colección es más adecuada para compartir datos simples entre los diseñadores y el host, en lugar de una funcionalidad compleja.
Servicios y elementos host de EditingContext
.NET Framework proporciona una serie de elementos y servicios integrados cuyo acceso se obtiene a través del contexto de edición.
Elementos:
AssemblyContextControlItem: administra la lista de ensamblados locales a los que se hace referencia que se utilizarán en el flujo de trabajo para los controles (como el editor de expresiones).
ReadOnlyState: indica si el diseñador está en estado de solo lectura.
Selection: define la colección de objetos seleccionados actualmente.
WorkflowFileItem: proporciona información sobre el archivo en que se basa la sesión de edición actual.
Servicios:
AttachedPropertiesService: permite agregar propiedades a la instancia actual utilizando AddProperty.
DesignerView: permite el acceso a las propiedades del lienzo del diseñador.
IActivityToolboxService: permite la actualización del contenido del cuadro de herramientas.
ICommandService: se utiliza para integrar los comandos del diseñador (como el menú contextual) con implementaciones de servicio personalizadas.
IDesignerDebugView: proporciona funcionalidad para el depurador del diseñador.
IExpressionEditorService: proporciona acceso al cuadro de diálogo Editor de expresiones.
IIntegratedHelpService: proporciona funcionalidad de ayuda integrada al diseñador.
IValidationErrorService: proporciona acceso a los errores de validación utilizando ShowValidationErrors.
IWorkflowDesignerStorageService: proporciona un servicio interno para almacenar y recuperar datos. .NET Framework utiliza internamente este servicio, el que no está pensado para su uso externo.
IXamlLoadErrorService: proporciona acceso a la colección de errores de carga de XAML utilizando ShowXamlLoadErrors.
ModelService: lo utiliza el diseñador para interactuar con el modelo del flujo de trabajo que se está editando.
ModelTreeManager: proporciona acceso a la raíz del árbol de elementos de modelo utilizando Root.
UndoEngine: proporciona funcionalidad de deshacer y rehacer.
ViewService: asigna elementos visuales a elementos de modelo subyacentes.
ViewStateService: almacena los estados de vista de los elementos de modelo.
VirtualizedContainerService: se usa para personalizar el comportamiento de la interfaz de usuario de contenedor virtual.
WindowHelperService: se utiliza para registrar y eliminar del Registro los delegados para las notificaciones de eventos. También permite establecer el propietario de una ventana.