Partilhar via


Usando o contexto de edição ModelItem

O ModelItem contexto de edição é o objeto que o aplicativo host usa para se comunicar com o designer. EditingContext expõe dois métodos, Items e Services, que podem ser usados

A coleção Items

A Items coleção é usada para acessar dados compartilhados entre o host e o designer ou dados disponíveis para todos os designers. Esta coleção tem os seguintes recursos, acessados através da ContextItemManager classe:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

A coleção de Serviços

A Services coleção é usada para acessar serviços que o designer usa para interagir com o host ou serviços que todos os designers usam. Esta coleção tem os seguintes métodos de nota:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Atribuindo uma atividade a um designer

Para especificar qual designer uma atividade usa, o atributo Designer é usado.

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

Criando um serviço

Para criar um serviço que sirva como um canal de informações entre o designer e o host, uma interface e uma implementação devem ser criadas. A interface é usada pelo Publish método para definir os membros do serviço, e a implementação contém a lógica para o serviço. No exemplo de código a seguir, uma interface de serviço e implementação são criadas.

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 um serviço

Para que um designer consuma um serviço, ele deve primeiro ser publicado pelo host usando o Publish método.

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

Subscrever um serviço

O designer obtém acesso ao serviço usando o Subscribe método no OnModelItemChanged método. O trecho de código a seguir demonstra como assinar um serviço.

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;
    }  
}  

Compartilhando dados usando a coleção Items

O uso da coleção Items é semelhante ao uso da coleção Services, exceto que SetValue é usado em vez de Publish. Essa coleção é mais apropriada para compartilhar dados simples entre os designers e o host, em vez de funcionalidades complexas.

EditingContext host items and services

O .NET Framework fornece vários itens internos e serviços acessados por meio do contexto de edição.

Itens:

Serviços: