8
Windows Presentation Foundation WS 2013/14 Prof. Dr. Herrad Schmidt Kapitel 8 Commands

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Embed Size (px)

Citation preview

Page 1: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation WS 2013/14Prof. Dr. Herrad Schmidt

Kapitel 8

Commands

Page 2: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 2

Commands (1)s.a. http://msdn.microsoft.com/en-us/library/ms752308.aspx

Zweck:

Commands dienen der Entkopplung der GUI von der Anwendungslogik.

Unterschiedliche Quellen (Button, Menü, Tastenkombination, etc.) können dieselbe Programmlogik aufrufen und diese auf verschiedene Ziele anwenden (z.B. Copy, Cut, Paste).

Mit Hilfe von Commands kann gesteuert und überwacht werden, ob in der momentanen Situation eine Aktion ausgeführt werden kann. Entsprechend kann ein Button oder Menüpunkt aktiviert bzw. deaktiviert werden.

Commands implementieren die ICommand-Schnittstelle mit den Methodenschnittstellen Execute und CanExecute sowie dem Event CanExecuteChanged.

Page 3: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 3

Commands (2)

Die WPF-Klassen RoutedCommand bzw. RoutedUICommand (hat zusätzlich ein Text-Property) implementieren ICommand. Sie können vom Entwickler genutzt werden, um die spezifische Logik zu implementieren.

Konzept: command: Befehl, der ausgeführt werden soll, z.B. Paste command source: Objekt, welches den Befehl aufruft, z.B. MenuItem command target: Objekt, für das der Befehl ausgeführt wird, z.B. TextBox Command binding: Objekt, das dem Befehl die Befehlslogik zuordnet, z.B. Window, auch CommandHandler genannt.CommandBinding enthält die EreignisHandler für die Ereignisse Executed und CanExecute.

Page 4: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 4

Commands (3)

Die Methoden Execute und CanExecute eines RoutedCommand enthalten nicht die Anwendungslogik des Befehls, sondern lösen Routingereignisse aus, die die Elementstruktur per Tunneling und Bubbling durchlaufen, bis sie auf ein Objekt mit einer CommandBinding treffen. Dabei wird ein RoutedCommand an Ereignishandler gebunden, die den Befehl implementieren.

Das Routing beginnt beim command target. Wenn ein Command Handler aufgerufen wurde, wird kein weiterer mehr ausgeführt.

command target kann bei der command source angegeben werden. Ist command target nicht definiert, wird das Element mit dem Tastaturfokus als command target verwendet.

Mittels CommandParameter können dem Command für den Aufruf Daten mitgegeben werden.

Page 5: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 5

Commands (4)

WPF stellt eine Reihe von vordefinierten Routed Commands in Befehlsbibliotheken zur Verfügung, für die nur noch die Logik des Befehls implementiert werden muss.

Die Befehlsbibliotheken kapseln die Commands in Klassen wie ApplicationCommands, …

Einige Controls stellen auch die Implementierungslogik für viele Commands in der Befehlsbibliothek zur Verfügung (built-in command binding) , z.B. die TextBox für Copy, Paste, Cut, Undo, Redo.

Page 6: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 6

Implementierung von vordefinierten RoutedCommands

Um ein Command bei einer command Source zu deklarieren, wird das Command-Property mit dem Namen des Commands belegt. <Button Command="ApplicationCommands.Copy"/>

Das Command-Property wird beim MenuItem, Button, Radio Button, CheckBox, Hyperlink, InputBinding (z.B. F1) u.a. Controls unterstützt.

Enthält ein Control die Implementierungslogik für diesen Command,wird der Befehl auf dieses angewandt, wenn es den Fokus erhält.

Muss die Logik implementiert werden, erfolgt ein CommandBinding.<Button Command="ApplicationCommands.Save">Speichern</Button>

Ein übergeordnetes Element fungiert als Command Handler: <Window...> <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.Save"

CanExecute="OnCommandCanExecute" Executed="OnCommandExecute"/> </Window.CommandBindings> ... Die EventHandler OnCommandCanExecute und OnCommandExecute sind zu implementieren.

Page 7: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 7

Erstellung eines RoutedUICommand

In der Klasse MainWindow werden ein Objekt der Klasse RoutedUICommand instanziiert:public static readonly RoutedUICommand cmd =

new RoutedUICommand("Anzeige", "cmd", typeof(MainWindow));

und die EventHandler implementiert.

In XAML:<CommandBinding Command="{x:Static Meins:MainWindow.cmd}"

Executed="cmd_Executed" CanExecute="cmd_CanExecute"/>

Implementierung eigener Commands

Ableitung einer Klasse aus ICommand und Implementierung der Methoden CanExecute und Execute sowie des Events CanExecuteChanged.In XAML: <Window.Resources>

<lokal:MeinCommand x:Key="einfachCommand" /> … <Button Command="{StaticResource MeinCommand}" …

Page 8: Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a. //msdn.microsoft.com/en-us/library/ms752308.aspx

Windows Presentation Foundation, Vorlesung Wintersemester 2013/14

Prof. Dr. Herrad SchmidtWS 13/14 Kapitel 8Folie 8

Solution 8_Commands

A_BuiltInCommandBinding

B_RoutedCommands

C_Parameter

D_Target

E_InputGestures

F_ImplementICommand