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 através do método Subscribe no método OnModelItemChanged. 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.

itens e serviços do host EditingContext

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

Itens:

Serviços: