Aktualisiert: November 2007
Bindet einen RoutedCommand an Ereignishandler, die den Befehl implementieren
Namespace:
System.Windows.Input
Assembly:
PresentationCore (in PresentationCore.dll)
XMLNS für XAML: http://schemas.microsoft.com/winfx/xaml/presentation
Visual Basic (Deklaration)
Public Class CommandBinding
Visual Basic (Verwendung)
Dim instance As CommandBinding
public class CommandBinding
public ref class CommandBinding
public class CommandBinding
public class CommandBinding
Verwendung von XAML-Objektelementen
Eine CommandBinding ordnet einem Befehl das PreviewExecuted/Executed-Ereignis und das PreviewCanExecute/CanExecute-Ereignis zu, die den Status des Befehls implementieren und ermitteln.
Wenn die Execute-Methode oder die CanExecute-Methode eines RoutedCommand aufgerufen werden, wird das PreviewExecuted/Executed-Ereignis oder das PreviewCanExecute/CanExecute-Ereignis für das Befehlsziel ausgelöst. Wenn das Befehlsziel eine CommandBinding für den Befehl aufweist, werden die entsprechenden Handler aufgerufen. Wenn das Befehlsziel keine CommandBinding für den Befehl aufweist, werden die Ereignisse in der Elementstruktur weitergeleitet, bis ein Element mit einer CommandBinding gefunden wird.
Eine CommandBinding kann nur eingeschränkt verwendet werden, wenn der ICommand keine CommandBinding darstellt. Dies liegt daran, dass eine CommandBinding den Befehl an den ExecutedRoutedEventHandler und den CanExecuteRoutedEventHandler bindet, die das Executed-Routingereignis und das CanExecute-Routingereignis überwachen. Diese werden ausgelöst, wenn die Execute-Methode und die CanExecute-Methode des RoutedCommand aufgerufen werden.
Im folgenden Beispiel wird veranschaulicht, wie Befehle in Windows Presentation Foundation (WPF) verwendet werden. In dem Beispiel wird gezeigt, wie ein RoutedCommand einer Button zugeordnet wird, wie eine CommandBinding erstellt wird und wie Ereignishandler erstellt werden, mit denen RoutedCommand implementiert wird. Weitere Informationen über Befehle finden Sie unter Befehlsübersicht.
Mit dem ersten Codeabschnitt wird die Benutzeroberfläche (user interface, UI) erstellt, die aus einer Button und einem StackPanel besteht. Dann wird eine CommandBinding erstellt, mit der die Befehlshandler dem RoutedCommand zugeordnet werden.
Die Command-Eigenschaft der Button ist dem Close-Befehl zugeordnet.
CommandBinding wird der CommandBindingCollection des Stamm-Window hinzugefügt. Die Ereignishandler Executed und CanExecute werden an diese Bindung angefügt und werden dem Close-Befehl zugeordnet.
Ohne CommandBinding gibt es keine Befehlslogik, sondern nur einen Mechanismus zum Aufrufen des Befehls. Wenn auf Button geklickt wird, wird PreviewExecuted RoutedEvent gefolgt von Executed RoutedEvent für das Befehlsziel ausgelöst. Diese Ereignisse durchlaufen die Elementstruktur auf der Suche nach einer CommandBinding für diesen speziellen Befehl. Da RoutedEvent die Elementstruktur abwärts und aufwärts durchläuft, sollte CommandBinding mit Bedacht gesetzt werden. Befindet sich CommandBinding auf einem dem Befehlsziel gleichgeordneten Element oder auf einem anderen Knoten, der nicht zur Route von RoutedEvent gehört, wird auf CommandBinding nicht zugegriffen.
<Window x:Class="WCSamples.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CloseCommand"
Name="RootWindow"
>
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Close"
Executed="CloseCommandHandler"
CanExecute="CanExecuteHandler"
/>
</Window.CommandBindings>
<StackPanel Name="MainStackPanel">
<Button Command="ApplicationCommands.Close"
Content="Close File" />
</StackPanel>
</Window>
// Create ui elements.
StackPanel CloseCmdStackPanel = new StackPanel();
Button CloseCmdButton = new Button();
CloseCmdStackPanel.Children.Add(CloseCmdButton);
// Set Button's properties.
CloseCmdButton.Content = "Close File";
CloseCmdButton.Command = ApplicationCommands.Close;
// Create the CommandBinding.
CommandBinding CloseCommandBinding = new CommandBinding(
ApplicationCommands.Close, CloseCommandHandler, CanExecuteHandler);
// Add the CommandBinding to the root Window.
RootWindow.CommandBindings.Add(CloseCommandBinding);
Der nächste Codeabschnitt implementiert die Ereignishandler Executed und CanExecute.
Der Executed-Handler ruft eine Methode auf, um die geöffnete Datei zu schließen. Der CanExecute-Handler ruft eine Methode auf, um zu bestimmen, ob eine Datei geöffnet ist. Ist eine Datei geöffnet, wird CanExecute auf true festgelegt. Andernfalls wird er auf false festgelegt.
// Executed event handler.
private void CloseCommandHandler(object sender, ExecutedRoutedEventArgs e)
{
// Calls a method to close the file and release resources.
CloseFile();
}
// CanExecute event handler.
private void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e)
{
// Call a method to determine if there is a file open.
// If there is a file open, then set CanExecute to true.
if (IsFileOpened())
{
e.CanExecute = true;
}
// if there is not a file open, then set CanExecute to false.
else
{
e.CanExecute = false;
}
}
System..::.Object
System.Windows.Input..::.CommandBinding
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Windows Vista
.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
.NET Framework
Unterstützt in: 3.5, 3.0
Referenz
Weitere Ressourcen