Я использую RelayCommand в своем приложении. Это отлично подходит для ввода кода в viewmodel, но как мне привязать нажатия клавиш к моей команде?
RoutedUICommand имеет свойство InputGestures, что делает команду автоматически вызываться при нажатии клавиши. (В качестве дополнительного бонуса он даже делает отображение нажатия клавиши в MenuItem.) К сожалению, нет никакого многоразового интерфейса для RoutedUICommand дополнительных свойств, поэтому я не могу сделать RelayUICommand, который получает ту же магию.
Я уже пробовал использовать InputBindings:
<Window.InputBindings>
<KeyBinding Key="PageUp" Command="{Binding SelectPreviousLayerCommand}"/>
</Window.InputBindings>
Но это дает мне исключение во время выполнения, потому что KeyBinding.Command не является свойством зависимостей. (На самом деле, о чем он жалуется, является то, что KeyBinding не является также DependencyObject.) И поскольку мой RelayCommand является свойством в моей модели ViewModel (в отличие от статического поля, для которого предназначен RoutedUICommand), привязка данных - единственный способ, которым я знаю ссылаться на него из XAML.
Как вы, ребята, решили это? Какой лучший способ привязать нажатие клавиши к RelayCommand?