Beispiel zum Deaktivieren der Befehlsquelle über den Verteilerzeitgeber

Aktualisiert: November 2007

In diesem Beispiel wird das Aktivieren und Deaktivieren einer Befehlsquelle über einen DispatcherTimer veranschaulicht.

Befehlsquellen wie die MenuItem-Klasse und die Button-Klasse überwachen das CanExecuteChanged-Ereignis im RoutedCommand, dem sie angefügt sind. So können sie bestimmen, wann der Befehl abgefragt werden muss, um zu ermitteln, ob der Befehl für das aktuelle Befehlsziel ausgeführt werden kann. Befehlsquellen deaktivieren sich normalerweise selbst, wenn der Befehl nicht ausgeführt werden kann. Sie aktivieren sich selbst, wenn der Befehl ausgeführt werden kann. Dies ist z. B. der Fall, wenn ein MenuItem ausgegraut wird, wenn der Befehl nicht ausgeführt werden kann.

Der CommandManager benachrichtigt den RoutedCommand über das RequerySuggested-Ereignis darüber, dass Bedingungen mit dem Befehlsziel geändert wurden. Der RoutedCommand löst das CanExecuteChanged-Ereignis aus, das von der Befehlsquelle überwacht wird. Normalerweise ist dieser Benachrichtigungsmechanismus ausreichend, in einigen Fällen erkennt der CommandManager jedoch nicht, dass die Bedingungen für das Befehlsziel geändert wurden. Das RequerySuggested-Ereignis wird daher nicht ausgelöst, und die Befehlsquelle fragt den RoutedCommand nicht ab. In diesen Fällen kann erzwungen werden, dass der CommandManager das RequerySuggested-Ereignis auslöst, indem InvalidateRequerySuggested aufgerufen wird.

In diesem Beispiel wird ein RoutedCommand erstellt, der nur ausgeführt werden kann, wenn der Wert für die Sekunden im aktuellen Zeitgeber größer als ein Zielwert ist. Es wird ein DispatcherTimer erstellt, der jede Sekunde InvalidateRequerySuggested aufruft. So wird sichergestellt, dass die Befehlsquelle das CanExecuteChanged-Ereignis empfängt, damit sie die CanExecute-Methode für den Befehl aufrufen kann.

Eine andere Variante dieses Beispiels finden Sie unter Beispiel für das Deaktivieren der Befehlsquelle über den Systemzeitgeber. Weitere Informationen über Befehle finden Sie unter Befehlsübersicht.

In diesem Beispiel soll nur ein bestimmtes Feature von Windows Presentation Foundation veranschaulicht werden, daher werden die bewährten Methoden für die Anwendungsentwicklung nicht befolgt. Ausführliche Informationen über empfohlene Vorgehensweisen bei der Anwendungsentwicklung für Windows Presentation Foundation (WPF) und Microsoft .NET Framework finden Sie unter folgenden Themen:

Eingabehilfen – Bewährte Methoden für Eingabehilfen

Sicherheit – Windows Presentation Foundation-Sicherheit

Lokalisierung – Übersicht über WPF-Globalisierung und -Lokalisierung

Download sample

Erstellen des Beispiels

  • Installieren Sie das Windows Software Development Kit (SDK) und öffnen Sie dessen Buildumgebungs-Befehlsfenster. Zeigen Sie im Startmenü auf Alle Programme und Microsoft Windows SDK, und klicken Sie dann auf CMD Shell.

  • Laden Sie das Beispiel, normalerweise aus der Software Development Kit (SDK)-Dokumentation, auf Ihre Festplatte herunter.

  • Um das Beispiel über das Buildumgebungs-Befehlsfenster zu erstellen, wechseln Sie zum Quellverzeichnis des Beispiels. Geben Sie an der Eingabeaufforderung MSBUILD ein.

  • Um das Beispiel mit in Microsoft Visual Studio zu erstellen, laden Sie die Projektmappe oder Projektdatei des Beispiels, und drücken Sie STRG+UMSCHALT+B.

Ausführen des Beispiels

  • Um das kompilierte Beispiel über das Buildumgebungs-Befehlsfenster auszuführen, führen Sie die EXE-Datei aus dem Ordner Bin\Debug oder Bin\Release, die unter dem Quellcodeordner des Beispiels enthalten sind, aus.

  • Um das kompilierte Beispiel in Visual Studio mit Debuggen auszuführen, drücken Sie F5.

Siehe auch

Aufgaben

Beispiel für das Deaktivieren der Befehlsquelle über den Systemzeitgeber

Konzepte

Befehlsübersicht