Compartir vía


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:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

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:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

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.

  • WorkflowCommandExtensionItem:

  • WorkflowFileItem: proporciona información sobre el archivo en que se basa la sesión de edición actual.

Servicios: