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.