Comandos roteados: Arquitetura WPF

Comandos roteados são recursos dentro da arquitetura WPF, que permitem serem realizadas ações independente do objeto que chama estas ações, como também, independente de quem implementa esta ação. Os comandos roteados são utilizados profundamente dentro da plataforma WPF, e quem deseja ter o WPF como ferramente de desenvolvimento deve conhecê-los.

    Pessoal, hoje falaremos de mais uma parte importante dentro da arquitetura WPF: os comandos roteados. Os Comandos roteados, são recursos que o WPF introduz, para que você possa conectar controles de interface de usuário a manipuladores( métodos ), que irão executar alguma ação ao serem invocados;  sem que haja um alto acoplamento e sem a necessidade, de uma dependência rigida de um para com o outro. Você pode conectar controles como botões, menus ou qualquer outro controle de interface de usuário a comandos roteados. Os comandos roteados possuem três características comuns são elas:
·         Elementos chamadores do comando são desassociados do manipulador do comando. Você não precisa ter uma referência direta entre ambos, como no caso de eventos roteados. Ai está o baixo acoplamento, eles não possuem dependência entre eles, garantindo assim o baixo acoplamento( para saber mais acesse o artigo ).
·         Comandos roteados irão habilitar ou desabilitar controles da tela, de acordo com o manipulador de comando. É o manipulador do comando quem vai indicar se o comando pode ser executado ou não.
·         Comandos roteados, vão poder associar atalhos do teclado, a manipuladores de comando, ou até mesmo outras entradas do usuário.
 
     Para utilizar comandos roteados, você precisa apenas definir a propriedade command, do controle chamador. Observe o exemplo abaixo:
 
<Button Command="ApplicationCommands.Save">Save</Button>
 
    Viu como é simples? A propriedade Command é suportada por controles como Button, Menu, RadioButton entre outros. Você pode ainda definir um elemento manipulador, utilizando o CommandBinding:
 
<Window ...>
  <Window.CommandBindings>
    <CommandBinding Command="ApplicationCommands.Save"   
      CanExecute="OnCanExecute" Executed="OnExecute"/>
  </Window.CommandBindings>
  ...
</Window>
 
    Note que o CommandBinding possui dois membros CanExecute e Executed. CanExecute é a uma propriedade boleana, que indica se o comando pode ou não ser executado, ou seja, se o mesmo, está ou não habilitado; já o método Executed, é onde você executa o comando proprieamente dito.
 
Comandos em Ação( existia um desenho com este nome risos )
 

    Observer o código XAML abaixo:

 
 
    Rodando uma aplicação com o código acima, você irá  ver que qualquer texto digitado em uma das caixas pode ser recortado ao clicar no botão. Isto se deve ao comando definido na propriedade command, e na mesma, é definido um comando padrão do WPF o Cut. Note que o botão apenas faz referência ao command, ele não tem nenhum conhecimento da implamentação do mesmo, isto é até uma maneira de manter um baixo acoplamento. Se a implementação do comando Cut mudar, isto não irá afetar quem faz referência ao comando, desde que, continue a realizar a ação de cortar. E note que enquanto você não selecionar algum texto, o botão estará desablitado, isto quer dizer que o comando só pode ser executado se houver um texto selecionado, entrando em ação assim a propriedade CanExecute.
 
Roteamento
     Os comandos também são roteados, por que são utilizados eventos roteados para enviar mensagens entre os manipuladores de comando e chamadores de comando dentro da árvore visual. Apenas um manipulador de comandos é ativo, isto acontece por que posso ter uma relação de vários chamadores, para vários manipuladores, ai que entram os eventos roteados, por que os mesmos são utilizados para encontrar o manipulador, identificar se o comando pode ser executado e executar o mesmo.
 
Definição do Comando
     Comandos roteados são definidos pela implementação da interface ICommand, que tem a seguinte definião:
 
  public interface ICommand {
    event EventHandler CanExecuteChanged;
    bool CanExecute(object parameter);
    void Execute(object parameter);
  }
 
     Quem programa esta interface, espera-se que utilize a propriedade CanExecute para determinar se algum código de invocação do comando está ou não habilitar a faze-lo. É através do evento CanExecuteChanged, que o chamador do comando poderá determinar quando chamar o método que será executado.  E o método Executed, é chamado quando o comando é invocado e o mesmo, é despachado ao manipulador do comando, através do evento roteado que percorre a árvore visual para encontrá-lo.
     Os controles que tem suporte a propriedade Command, é por que implementam a interface ICommandSource. A interface ICommandSource, tem a definição abaixo:
 
public interface ICommandSource {
  ICommand Command { get; }
  object CommandParameter { get; }
  IInputElement CommandTarget { get; }
}
     A propriedade Command associa o chamador ao comando que ele irá invocar. Bom pessoal, mais um passo para aprender sobre o WPF, comando roteados, para inúmeros fins, esperoq eu tenha ajudado e que você possam se aprofundar na arquitetura do WPF e tirar proveito desta excelente tecnologia, um forte abraço e até a próxima.
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados