This article has been localized into German by the community.
Einführung in WPF Befehle
In einem vorherigen Kapitel dieses Tutorials haben wir darüber gesprochen, wie Ereignisse behandelt werden, z.B. wenn der User einen Button drückt oder einen Menüpunkt auswählt. In einer modernen Benutzeroberfläche ist es für Funktionen dagegen üblich, von verschiedenen Stellen, ausgelöst durch verschiedene Benutzeraktionen, erreichbar zu sein.
Zum Beispiel: Hat man eine typische Benutzeroberfläche mit einem Hauptmenü und einigen Toolbars, wird die gleiche Aktion - wie Neu oder Öffnen - sowohl im Menü, im Toolbar, als Kontextmenü (z. B. durch Rechtsklick in den Hauptbereich) und als Tastaturkürzel wie Strg+N und Strg+O verfügbar sein.
Jede dieser Aktionen muss genau den gleichen Code ausführen, also müssten Sie in einer WinForms-Anwendung für jede dieser Aktionen ein Ereignis definieren und dann eine gemeinsame Funktion aufrufen. Im obigen Beispiel würde das zu mindestens drei Ereignisbehandlern und etwas Code für die Tastaturkürzel führen. Keine ideale Situation.
Befehle
Mit WPF versucht Microsoft, das mit einem Konzept namens "Befehle" zu beheben. Es erlaubt Ihnen, Aktionen an einer Stelle zu definieren und dann von allen Bedienelementen Ihrer Benutzeroberfläche, zum Beispiel Menüeinträgen, Schaltflächen in der Symbolleiste usw. auf sie zuzugreifen. WPF hört auch auf Tastenkombinationen und leitet sie an den richtigen Befehl weiter, falls vorhanden, was es zur idealen Möglichkeit macht, Tastenkombinationen in einer Anwendung anzubieten.
Befehle ersparen uns auch eine weitere Mühe, wenn es um mehrere Zugänge zur gleichen Funktion geht. In einer WinForms-Anwendung wären Sie für das Schreiben von Code verantwortlich, der Benutzeroberflächenelemente deaktivieren könnte, wenn die Aktion nicht verfügbar ist. Wenn Ihre Anwendung beispielsweise einen Zwischenablagebefehl wie "Ausschneiden" anbietet, aber nur, wenn Text ausgewählt wurde, müssen Sie sowohl den Hauptmenüpunkt, die Schaltfläche in der Symbolleiste als auch den Kontextmenüeintrag bei jeder Änderung der Textauswahl manuell aktivieren und deaktivieren.
Bei WPF-Befehlen ist dies zentralisiert. Mit einer einzigen Methode entscheiden Sie, ob ein bestimmter Befehl ausgeführt werden kann oder nicht, und dann schaltet WPF alle abonnierenden Oberflächenelemente automatisch ein oder aus. Das macht es so viel einfacher, eine reaktive und dynamische Anwendung zu erstellen!
Command-Bindungen
Befehle machen zuerst einmal nichts von selbst. Grundsätzlich bestehen sie aus dem ICommand Interface, das nur ein Ereignis und zwei Methoden definiert: Execute() und CanExecute(). Die erste dient zur Durchführung der eigentlichen Aktion, die zweite zur Feststellung, ob die Aktion momentan verfügbar ist. Um die eigentliche Aktion des Befehls auszuführen, benötigen Sie eine Verbindung zwischen dem Befehl und Ihrem Code, und hier kommt das Command Binding ins Spiel.
Ein CommandBinding wird normalerweise in einem Fenster oder einem UserControl definiert und enthält eine Referenz auf den Command, den es behandelt, sowie die eigentlichen Ereignisbehandler für den Umgang mit den Ereignissen Execute() und CanExecute() des Commands.
Vordefinierte Commands
Sie können natürlich Ihre eigenen implementieren, die wir in einem der nächsten Kapitel behandeln werden, aber um es Ihnen leichter zu machen, hat das WPF-Team über 100 häufig verwendete Befehle definiert, die Sie verwenden können. Sie wurden in 5 Kategorien unterteilt, die als ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands und ComponentCommands bezeichnet werden. Insbesondere ApplicationCommands enthält Befehle für viele sehr häufig verwendete Aktionen wie Neu, Öffnen, Speichern und Ausschneiden, Kopieren und Einfügen.
Zusammenfassung
Befehle helfen Ihnen, auf eine gemeinsame Aktion aus verschiedenen Quellen mit einem einzigen Ereignisbehandler zu reagieren. Es erleichtert auch die Aktivierung und Deaktivierung von Elementen der Benutzeroberfläche auf der Grundlage der aktuellen Verfügbarkeit und des aktuellen Status. Das war alles Theorie, aber in den nächsten Kapiteln werden wir besprechen, wie Befehle verwendet werden und wie Sie Ihre eigenen benutzerdefinierten Befehle definieren können.