Usando o contexto de edição de ModelItem
ModelItem que 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 de itens
A coleção de Items é usada para acessar os dados que são compartilhados entre o host e o designer, ou os dados que estão disponíveis para todos os designers. Essa coleção possui os seguintes recursos, acessados por meio da classe ContextItemManager :
A coleção de serviços
A coleção de Services é usada para acessar os 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 observação:
Atribuindo a um designer uma atividade
Para especificar que o designer uma atividade, use o atributo de designer é usado.
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
Criando um serviço
Para criar um serviço que os serve como uma canalização de informações entre o designer e o host, uma interface e uma implementação deve ser criados. A interface é usada pelo método de Publish para definir os membros de serviço, e a implementação contém a lógica para o serviço. No exemplo de código, uma interface e uma implementação de serviç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
} ;
}
}
Publicando um serviço
Para que um designer consome um serviço, deve primeiro ser publicados pelo host que usa o método de Publish .
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
Assinar um serviço
O designer obtém o acesso ao serviço usando o método de Subscribe no método de OnModelItemChanged . O snippet 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 de itens
Usar a coleção de itens é semelhante a usar a coleção de serviços, exceto que SetValue é usado em vez de publicação. Essa coleção é mais adequado para compartilhar dados simples entre os designers e o host, em vez de funcionalidades complexas.
Itens e serviços de host de EditingContext
O .NET Framework fornece um número de itens e serviços internos acessados com o contexto de edição.
Itens:
AssemblyContextControlItem: Gerencia a lista de assemblies locais referenciados que serão usados dentro de fluxo de trabalho para controles (como o editor de expressão).
ReadOnlyState: Indica se o designer está em um estado somente leitura.
Selection: Define a coleção de objetos que são selecionados no momento.
WorkflowFileItem: Fornece informações sobre o arquivo que a sessão de edição atual é baseada em sobre.
Serviços:
AttachedPropertiesService: Permite que as propriedades são adicionadas à instância atual, usando o AddProperty.
DesignerView: Permite o acesso às propriedades de tela de designer.
IActivityToolboxService: Permite que o conteúdo da caixa de ferramentas são atualizados.
ICommandService: Usado para integrar comandos de designer (como o menu de contexto) com personalizada forneceu implementações de serviço.
IDesignerDebugView: Fornece a funcionalidade para o depurador de designer.
IExpressionEditorService: Fornece acesso a caixa de diálogo editor de expressão.
IIntegratedHelpService: Fornece o designer com funcionalidade integrado da ajuda.
IValidationErrorService: Fornece acesso aos erros de validação usando o ShowValidationErrors.
IWorkflowDesignerStorageService: Fornece um serviço interno para armazenar e recuperar dados. Esse serviço é usado internamente pelo .NET Framework e não é destinado para uso externo.
IXamlLoadErrorService: Fornece acesso à coleção de erro de carregamento XAML usando o ShowXamlLoadErrors.
ModelService: Usado pelo designer para interagir com o modelo de fluxo de trabalho que está sendo editado.
ModelTreeManager: Fornece acesso à raiz da árvore modelo de item usando Root.
UndoEngine: Fornece etapas desfaz e refaz a funcionalidade.
ViewService: Mapeia elementos visuais aos itens modelo subjacente.
ViewStateService: Armazena estados de exibição para os itens modelo.
VirtualizedContainerService: Usado para personalizar o comportamento virtual de interface de usuário do recipiente.
WindowHelperService: Usado para registrar e representantes de unregister notificações de eventos. Também permite que um proprietário da janela é definido.