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:
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:
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:
AssemblyContextControlItem: Gerencia a lista de assemblies locais referenciados que serão usados dentro do 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 estão atualmente selecionados.
WorkflowFileItem: Fornece informações sobre o arquivo no qual a sessão de edição atual se baseia.
Serviços:
AttachedPropertiesService: Permite que propriedades sejam adicionadas à instância atual, usando AddProperty.
DesignerView: Permite o acesso às propriedades da tela do designer.
IActivityToolboxService: Permite que o conteúdo da caixa de ferramentas seja atualizado.
ICommandService: Usado para integrar comandos do designer (como o Menu de Contexto) com implementações de serviço personalizadas.
IDesignerDebugView: Fornece funcionalidade para o depurador do designer.
IExpressionEditorService: Fornece acesso à caixa de diálogo Editor de Expressões.
IIntegratedHelpService: Fornece ao designer a funcionalidade de ajuda integrada.
IValidationErrorService: Fornece acesso a erros de validação usando ShowValidationErrorso .
IWorkflowDesignerStorageService: Fornece um serviço interno para armazenar e recuperar dados. Este serviço é usado internamente pelo .NET Framework e não se destina a uso externo.
IXamlLoadErrorService: Fornece acesso à coleção de erros de carregamento XAML usando ShowXamlLoadErrors.
ModelService: Usado pelo designer para interagir com o modelo do fluxo de trabalho que está sendo editado.
ModelTreeManager: Fornece acesso à raiz da árvore de itens do modelo usando Root.
UndoEngine: Fornece a funcionalidade de desfazer e refazer.
ViewService: Mapeia elementos visuais para itens de modelo subjacentes.
ViewStateService: Armazena estados de exibição para itens de modelo.
VirtualizedContainerService: Usado para personalizar o comportamento da interface do usuário do contêiner virtual.
WindowHelperService: Usado para registrar e cancelar o registro de delegados para notificações de eventos. Também permite que um proprietário de janela seja definido.