WPF : Commands

Una de les novetats que hi ha a WPF és la dels Commands. Els commands és una manera de poder executar operacions des de qualsevol control que generi events: una opció del menú, de la barra d’eines, d’un menú contextual o d’un simple botó. En Winforms cada un d’aquests controls genera un event (generalment el click) i hem de fer que cada un d’ells executi les acciones corresponents. Però què passa quan la mateixa acció s’executa des de diferents parts de la pantalla? Doncs que per cada un dels events hem d’executar la mateixa acció.

Amb WPF tenim també aquesta possibilitat, els events continuen exisitint encara que ara s’anomenen RoutedEvents, però tenim una manera més senzilla de fer que diferents controls de la pantalla executin la mateixa acció: utilitzant la propietat Command. Aquesta propietat ja és utilitzada en ASP.NET i per tant per els que heu treballat amb ASP.NET ja us sona millor. La unica cosa que hem de tenir present és que es diferencia molt amb la manera d’implementar-ho.

La interface ICommand. Aquesta és la interface que implementen tots els command que tenim a WPF. Amb WPF tenim una llibreria implementada de commands: ApplicationCommands, NavigationCommands, EditingCommands, ComponentCommands i MediaCommands.

public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}

RoutedCommand. És una clase base que implementa ICommand.

RoutedUICommand. És una clase base que implementa ICommand i afegeix una propietat Text que és el que es visualitzarà al control. Per tant és el que utilitzem en els controls de la pantalla.

El model Command

Commands: Un Command representa una acció a realitzar

Command Binding: Enllaç del command a als mètodes que implementen els events: Executed i CanExecuted

Command Source: Control que llença el command (opció de menú o botó)

Command Target: Control on l’acció es realitzarà.

Per veure-ho millor anem a aplicar un exemple amb el Command Open.

<MenuItem Header="File">
<MenuItem Command="Open"></MenuItem>
</MenuItem>

El menú que genera és el següent:

Està desactivat perquè ens falta indicar com implementarem l’acció, per això creem l’enllaç

<Window.CommandBindings>
<CommandBinding Command="Open" Executed="CommandBinding_Executed"></CommandBinding>
</Window.CommandBindings>

La implementació

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
//Implementem l'acció a realitzar
}

A la segona part parlo dels RoutedUICommand

Advertisements

Un pensament sobre “WPF : Commands

  1. Retroenllaç: WPF : Commands II | My freelancer life

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s