This article is currently in the process of being translated into Dutch (~99% done).
Inleiding op WPF opdrachten
In een eerder hoofdstuk van deze handleiding hebben we het gehad over het omgaan met gebeurtenissen, bijvoorbeeld wanneer de gebruiker op een knop of een menu item klikt. In een moderne gebruikersinterface is het gebruikelijk dat een functie op verschillende plaatsen bereikbaar is, aangeroepen door verschillende gebruikersacties.
Als u bijvoorbeeld een typische interface hebt met een hoofdmenu en een set werkbalken, is een actie zoals Nieuw of Openen mogelijk beschikbaar in het menu, op de werkbalk, in een contextmenu (bijvoorbeeld wanneer u met de rechtermuisknop klikt in het toepassingsgebied) ) en van een sneltoets zoals Ctrl + N en Ctrl + O.
Elk van deze acties moet uitvoeren wat typisch hetzelfde stuk code is, dus in een WinForms toepassing zou u een gebeurtenis voor elk van hen moeten definiëren en vervolgens een algemene functie moeten aanroepen. Met het bovenstaande voorbeeld zou dat leiden tot ten minste drie gebeurtenissen en een code om de sneltoets af te handelen. Geen ideale situatie.
Opdrachten
Met WPF probeert Microsoft dat te verhelpen met een concept dat commando's wordt genoemd. Hiermee kunt u acties op één plek definiëren en vervolgens ernaar verwijzen vanuit al uw elementen voor alle gebruikersinterfaces, zoals menu-items, knoppen op de werkbalk, enzovoort. WPF reageert ook op sneltoetsen en geeft deze door aan de juiste opdracht, als die er is, waardoor het de ideale manier is om sneltoetsen in een toepassing aan te bieden.
Commando's lossen ook nog een ander probleem op bij het werken met meerdere ingangen van dezelfde functie. In een WinForms toepassing bent u verantwoordelijk voor het schrijven van code waarmee elementen van de gebruiker interface konden worden uitgeschakeld als de actie niet beschikbaar was. Als uw toepassing bijvoorbeeld een klembord opdracht zoals Knippen kon gebruiken, maar alleen wanneer tekst was geselecteerd, moest u het hoofdmenu item, de werkbalk knop en het contextmenu item handmatig in- en uitschakelen telkens wanneer de tekstselectie werd gewijzigd.
Met WPF opdrachten is dit gecentraliseerd. Met één methode bepaalt u of een bepaalde opdracht al dan niet kan worden uitgevoerd en schakelt WPF automatisch alle onderliggende interface elementen in of uit. Dit maakt het zoveel gemakkelijker om een responsieve en dynamische applicatie te maken!
Command bindings
Command's doen eigenlijk helemaal niets zelf. In de root bestaan ze uit de ICommand interface, die alleen een gebeurtenis en twee methoden definieert: Execute() en CanExecute(). De eerste is voor het uitvoeren van de daadwerkelijke actie, terwijl de tweede is om te bepalen of de actie momenteel beschikbaar is. Om de daadwerkelijke actie van de opdracht uit te voeren, hebt u een koppeling tussen de opdracht en uw code nodig en dit is waar de CommandBinding in het spel komt.
Een CommandBinding wordt meestal gedefinieerd in een Window of in een UserControl en bevat verwijzingen naar de opdracht die wordt afgehandeld, evenals de feitelijke gebeurtenis afwikkeling voor het omgaan met de gebeurtenissen Execute() en CanExecute() van de opdracht.
Vooraf gedefinieerde opdrachten
Je kunt natuurlijk je eigen commando's implementeren, die we in een van de volgende hoofdstukken zullen bekijken, maar om het je gemakkelijker te maken, heeft het WPF meer dan 100 veelgebruikte commando's die je kunt gebruiken. Ze zijn onderverdeeld in 5 categorieën, genaamd ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands en ComponentCommands. Vooral ApplicationCommands bevat opdrachten voor veel zeer vaak gebruikte acties zoals Nieuw, Openen, Opslaan en Knippen, Kopiëren en Plakken.
Samenvatting
Met opdrachten kunt u reageren op een gemeenschappelijke actie van verschillende bronnen, met behulp van een enkele gebeurtenis afwikkelingen. Het maakt het ook een stuk eenvoudiger om elementen van de gebruiker interface in en uit te schakelen op basis van de huidige beschikbaarheid en status. Dit was allemaal theorie, maar in de volgende hoofdstukken zullen we bespreken hoe opdrachten worden gebruikt en hoe u uw eigen aangepaste opdrachten definieert.