Partilhar via


Responder às alterações e propagá-las

Quando um elemento é criado, excluído ou atualizado, você pode escrever código que propaga a alteração para outras partes do modelo ou para recursos externos, como arquivos, bancos de dados ou outros componentes.

Referência

Como diretriz, considere estas técnicas na seguinte ordem:

Técnica Cenários Para obter mais informações
Defina uma propriedade de domínio Calculado. Uma propriedade de domínio cujo valor é calculado de outras propriedades no modelo. Por exemplo, um preço que é a soma dos preços dos elementos relacionados. Propriedades calculadas e de armazenamento personalizado
Defina uma propriedade de domínio de Armazenamento Personalizado. Uma propriedade de domínio armazenada em outras partes do modelo ou externamente. Por exemplo, você pode analisar uma cadeia de caracteres de expressão em uma árvore no modelo. Propriedades calculadas e de armazenamento personalizado
Substituir manipuladores de alteração, como OnValueChanging e OnDeleting Mantenha elementos diferentes em sincronia e mantenha valores externos em sincronia com o modelo.

Restringir valores a intervalos definidos.

Chamado imediatamente antes e depois do valor da propriedade e outras alterações. Você pode encerrar a alteração lançando uma exceção.
Manipuladores de alterações nos valores de propriedades de domínio
Regras Você pode definir regras que são enfileiradas para execução logo antes do final de uma transação na qual ocorreu uma alteração. Elas não são executadas em Desfazer ou Refazer. Use-as para manter uma parte do repositório em sincronia com outra. Regras propagam alterações dentro do modelo
Eventos de repositório O repositório de modelagem fornece notificações de eventos como adicionar ou excluir um elemento ou link ou alterar o valor de uma propriedade. O evento também é executado em Desfazer e Refazer. Use eventos de repositório para atualizar valores que não estão no repositório. Manipuladores de eventos propagam alterações fora do modelo
Eventos do .NET As formas têm manipuladores de eventos que respondem a cliques do mouse e outros gestos. Você precisa se registrar para esses eventos para cada objeto. O registro normalmente é feito em uma substituição de InitializeInstanceResources e deve ser feito para cada elemento.

Esses eventos geralmente ocorrem fora de uma transação.
Como interceptar um clique em uma forma ou um decorador
Regras de limites Uma regra de limites é usada especificamente para restringir os limites de uma forma. BoundsRules restringem o local e o tamanho de uma forma
Regras de seleção As regras de seleção restringem especificamente o que o usuário pode selecionar. Como acessar e restringir a seleção atual
OnAssocatedPropertyChanged Indique os estados dos elementos do modelo usando recursos de formas e conectores, como sombra, pontas de seta, cor e larguras de linha e estilo. Atualizando formas e conectores para refletir o modelo

Comparar regras e armazenar eventos

Os notificadores de alteração, as regras e os eventos são executados quando ocorrem alterações em um modelo.

As regras geralmente são aplicadas na transação final na qual a alteração ocorreu e os eventos são aplicados depois que as alterações em uma transação são confirmadas.

Use eventos de repositório para sincronizar o modelo com objetos fora da Store e regras para manter a consistência dentro da Store.

  • Criando regras personalizadas Você cria uma regra personalizada como uma classe derivada de uma regra abstrata. Você também deve notificar a estrutura sobre a regra personalizada. Para obter mais informações, consulte Regras propagam alterações no modelo.

  • Assinando eventos Antes de assinar um evento, crie um manipulador de eventos e um delegado. Em seguida, use a EventManagerDirectorypropriedade para assinar o evento. Para obter mais informações, confira Manipuladores de eventos propagam alterações fora do modelo.

  • Desfazer alterações Quando você desfaz uma transação, os eventos são gerados, mas as regras não são aplicadas. Se uma regra alterar um valor e você desfazer essa alteração, o valor será redefinido para o valor original durante a ação desfazer. Quando um evento é gerado, você deve alterar manualmente o valor de volta para seu valor original. Para saber mais sobre transações e desfazer, consulte Como usar transações para atualizar o modelo.

  • Passando argumentos de evento para regras e eventos Os eventos e as regras são passados para um parâmetro EventArgs que tem informações sobre como o modelo foi alterado.