This article has been localized into Danish by the community.
Introduktion til WPF kommandoer
I et tidligere afsnit i dette selvstudie snakkede vi om at håndtere hændelser, f.eks. når en bruger klikker på en knap eller et menupunkt. I et moderne brugerinterface kan en sådan funktion dog nås fra flere steder, udløst af forskellige brugerhandlinger.
F.eks. hvis du har et typist interface med en hovedmenu og et sæt værktøjslinjer, kan handlinger som Ny og Åbn være tilgængelige fra menu, i værktøjslinjen, i en kontekstmenu (når man højreklikker i det primære område i applikationen), og fra tastaturgenveje som Ctrl+N og Ctrl+O.
Hver af disse handlinger skal udføre noget, som typisk er nøjagtig det samme stykke kode, så i en WinForms applikation, vil du definere en hændelse for hver af dem og derfra kalde en fælles funktion. Med eksemplet ovenfor ville dette føre til i hvert fald tre event handlere og noget kode til at håndtere tastaturgenvejen. Ikke den mest optimale situation.
Kommandoer
Med WPF forsøger Microsoft at afhjælpe dette med et koncept kaldet kommandoer. Det tillader dig at definere handlinger et sted og derefter referere til dem fra alle dine interface-kontroller som menuelementer, værktøjsliniekanpper osv. WPF vil også lytte efter tastaturgenveje og sende dem videre til den relevante kommando - hvis der er nogen - hvilket gør det til en ideel måde at tilbyde tastaturgenveje i en applikation.
Kommandoer løser også en anden udfordring, når man har med flere indgangspunkter til samme funktion at gøre. I en WinForms applikation er du ansvarlig for at skrive kode, som kan deaktivere brugerinterfaceelementer, når handlingen ikke var tilgængelig. F.eks. hvis din applikation var i stand til at bruge en udklipsholder kommando som Klip, men kun når tekst var valgt, skulle du manuelt aktivere og deaktivere menuelementet, værktøjslinjeknappen og kontekstmenueelementet hver gang, tekstmarkeringen blev ændret.
Med WPF kommandoer er dette centraliseret. Med en metode kan du beslutte, om en given kommando kan udføres eller ej, og derefter slår WPF automatisk alle abonnerende interfaceelementer til eller fra. Dette gør det meget nemmere at oprette responsive og dynamiske applikationer.
Kommandobindinger
Kommandoer gør ikke noget af dem selv. Grundlæggende består de af ICommand interfacet, som kun definerer en hændelse og to metoder: Execute() og CanExecute(). Den første er til udførelse af handlingen, mens den anden er til at afgøre, om handlingen er tilgængelig for øjeblikket. For at udføre den faktiske handling, behøver du et link mellem kommandoen og din kode, og det er her, CommandBinding kommer i spil.
En CommandBinding defineres normalt på et Window eller en UserControl og indeholder en reference til den Command, som den håndterer, sammen med de faktiske event handlere for at håndtere Execute() og CanExecute() hændelserne på kommandoen.
Præ-definerede kommandoer
Du kan selvfølgelig implementere dine egne kommandoer, hvilket vi vil se på i et af de næste afsnit. Men for at gøre det nemmere for dig, har WPF-holdet defineret over 100 almindelig brugte kommandoer, du kan bruge. De er delt i 5 kategorier ved navn ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands og ComponentCommands. Specielt ApplicationCommands indeholder kommandoer for en lang række ofte brugte handling som New, Open, Save samt Cut, Copy og Paste.
Resume
Kommandoer hjælper dig med at reagere på en fælles handling fra flere forskellige kilder ved at bruge en enkelt event handler. De gør det også meget nemmere at aktivere og deaktivere elementer i brugerinterfacet baseret på aktuel tilgængelighed og stadie. Dette var alt sammen teori, men i de næste afsnit vil vi diskutere hvordan, kommandoer bliver brugt og hvordan, du definere dine egne brugerdefinerede kommandoer.