Ich benutze die RelayCommand in meiner App. Es ist großartig, den Code in das Viewmodel zu schreiben, aber wie verbinde ich Tastenanschläge mit meinem Befehl?Keybinding ein RelayCommand
RoutedUICommand hat seine InputGestures-Eigenschaft, wodurch der Befehl automatisch aufgerufen wird, wenn ich den Tastendruck drücke. (Als zusätzlichen Bonus macht es sogar die Tastendruckanzeige im MenuItem.) Leider gibt es keine wiederverwendbare Schnittstelle für die zusätzlichen Eigenschaften von RoutedUICommand, so dass ich keinen RelayUICommand erstellen kann, der die gleiche Magie bekommt.
Ich habe bereits versucht Inputbindings mit:
<Window.InputBindings>
<KeyBinding Key="PageUp" Command="{Binding SelectPreviousLayerCommand}"/>
</Window.InputBindings>
Aber das wird mir eine Laufzeitausnahme, weil KeyBinding.Command keine Abhängigkeitseigenschaft ist. (Eigentlich beschwert es sich, dass KeyBinding nicht einmal ein DependencyObject ist.) Und da mein RelayCommand eine Eigenschaft in meinem ViewModel ist (im Gegensatz zu dem statischen Feld, für das RoutedUICommand bestimmt ist), ist die Datenbindung die einzige mir bekannte Methode um es von XAML zu referenzieren.
Wie habt ihr das gelöst? Was ist der beste Weg, um einen Tastenanschlag an einen RelayCommand zu binden?
Das Binden der Command-Eigenschaft der KeyBinding-Klasse in .NET 4.0 ist in einem Artikel unter http://tomlev2.wordpress.com/2009/10/26/vs2010-binding-support-in-inputbindings/ beschrieben. –
Der obige Link wurde verschoben http://www.thomaslevesque.com/2009/10/26/vs2010-binding-support-in-inputbindings/ – avenmore