Commands en WPF

Windows Presentation Foundation provee unos  tipos de eventos abstractos y
desacoplados que han sido llamados Comandos. Realmente la gran diferencia
existente  con  respecto  a  eventos  clásicos  como  el  que  se  lanza  cuando  un
usuario selecciona un elemento en una lista desplegable, es que los comandos
no  están  ligados  al  interfaz  de  usuario  que  los  exponen,  es  decir,  solo
representan acciones independientemente del interfaz.
Realmente  los  comandos  no  son  una  invención  de  Windows  Presentation
Foundation,  esta  tecnologia  ya  estaba  presente  en  Microsoft  Foundation
Classes (MFC) con un mecanismo similar.

En este tipo de eventos para describir el modelo existen cuatro piezas clave.

Commands

Representa una  tarea de un  aplicativo  la  cual mantiene  en  todo momento  si
puede o no ser ejecutada.

Command Sources

Son  los  que  lanza  un  comando,  es  decir, un botón  podría  ser  un Command
Source ya que puede lanzar un comando.

Command Bindings

Usando  un mismo  comando  con  diferentes  bindings  podemos  lanzar  dicho
comando en diferentes sitios teniendo un significado diferente en cada  lugar,
es  decir,  cada  command  binding  enganchará  un  comando  con  la  lógica
necesaria.

Command Targets

Para  ver  este  último  elemento  recurramos  al  tipico  ejemplo  del  comando
Pegar, donde el Command Target será el elemento donde el comando actuará.
Es  decir,  en  el  caso  del  comando  Pegar,  el  command  target  será  el TextBox
donde se pegará el texto que hubiera en el portapapeles. 

 

ICommand

Todo  comando  implementa  el  interfaz  ICommand  que  esta  disponible  en
System.Windows.Input. Este interfaz incluye tres miembros: dos métodos y un
evento.

Execute

Contendrá la lógica ha implementar por el comando en la aplicación. 

CanExecute

Sirve  para  devolver  el  estado  del  comando  pudiendo  comunicar  si  este  esta
habilitado o no.

CanExecuteChanged

Siempre que el valor de CanExecute cambie se lanzará un evento informando
de ello.

    public class MyCommand: ICommand 
    { 
        public bool CanExecute(object parameter) 
        { 
            throw new NotImplementedException(); 
        } 
 
        public event EventHandler CanExecuteChanged; 
 
        public void Execute(object parameter) 
        { 
            throw new NotImplementedException(); 
        } 
    } 

 

Comandos por defecto


Por suerte, no hay que  implementar comandos comunes como Cortar, Pegar,

Copiar,  etc  ya  que  WPF  provee  una  serie  de  comandos  preestablecidos  y

expuesto como propiedades estáticas en cinco clases diferentes

ApplicationCommands

Close, Copy, Cut, Delete, Find, Help, New, Open, Paste, Print, PrintPreview,

Properties, Redo, Replace, Save, SaveAs, SelectAll, Stop, Undo, etc.

ComponentCommands

MoveDown,  MoveLeft,  MoveRight,  MoveUp,  ScrollByLine,  ScrollPageDown,

ScrollPageLeft,  ScrollPageRight,  ScrollPageUp,  SelectToEnd,  SelectToHome,

SelectToPageDown, SelectToPageUp, etc.

MediaCommands

ChannelDown,  ChannelUp,  DecreaseVolume,  FastForward,  IncreaseVolume,

MuteVolume, NextTrack, Pause, Play, PreviousTrack, Record, Rewind, Select,

Stop, etc.

NavigationCommands

BrowseBack, BrowseForward, BrowseHome, BrowseStop, Favorites, FirstPage,

GoToPage, LastPage, NextPage, PreviousPage, Refresh, Search, Zoom, etc.

EditingCommands

AlignCenter,  AlignJustify,  AlignLeft,  AlignRight,  CorrectSpellingError,

DecreaseFontSize,  DecreaseIndentation,  EnterLineBreak,

EnterParagraphBreak,  IgnoreSpellingError,  IncreaseFontSize,

IncreaseIndentation,  MoveDownByLine,  MoveDownByPage,

MoveDownByParagraph,  MoveLeftByCharacter,  MoveLeftByWord,

MoveRightByCharacter, MoveRightByWord, etc.

Uso de los Comandos desde XAML


Existen controles que  incluyen   y exponent  la  lógica de comandos por  lo que

no  debemos  de  preocuparnos  de  realizar  ningun  trabajo  sobre  comandos.

Estos  controles  implementan  el  interfaz  ICommandSource  exponiendo  los

siguientes miembros:

Command

Se le asigna el comando a ejecutar.

CommandParameter

Representa un valor definido por el usuario que será pasado como parámetro

al comando.

CommandTarget

Objeto al que afecta la ejecución del comando.

 

En  el  siguiente  típico  ejemplo  donde  veremos  como  usar  los  comandos

preestablecidos de Cortar, Pegar  y Copiar que  afectarán  a una  caja de  texto.

Estos  comandos  serán  lanzados  por  varios  botones  de  la  barra  de

herramientas.

Utilizando DataBinding asignamos como CommandTarget el elemento de tipo

TextBox  y  de  nombre  txtDocument.  En  Command  irá  cada  uno  de  los

comandos a asignar: Cut, Copy o Paste.

 

 

<StackPanel> 
   <ToolBar> 
      <Button Command="Cut" 
              CommandTarget="{Binding  
ElementName=txtDocument}">Cortar</Button> 
      <Button Command="Copy" 
              CommandTarget="{Binding 
ElementName=txtDocument}">Copiar</Button> 
      <Button Command="Paste" 
              CommandTarget="{Binding 
ElementName=txtDocument}">Pegar</Button> 
   </ToolBar> 
   <TextBox Name="txtDocument" Width="300"></TextBox> 
</StackPanel> 

 

image

Un comentario sobre “Commands en WPF”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *