2016-07-18 5 views
3

Я пытаюсь связать любую клавишу клавиатуры, нажатую на команду в ViewModel.Привязать любую клавишу, нажатую для команды в VM WPF

Я знаю, что я могу связать конкретный ключ, используя:

<Window.InputBindings> 
    <KeyBinding Command="{Binding ChangeIdCommand}" Key="B"/> 
</Window.InputBindings> 

Может ли я связать все нажатия ChangeIdCommand без необходимости вводить их все вручную?

ответ

1

Попробуйте после определения окна:

<Window x:Class="wpfApplication.MainWindow" 
     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" ...> 

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="KeyDown"> 
     <i:InvokeCommandAction Command="{Binding ChangeIdCommand}" /> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
+1

Это правильный ответ. KeyBindings нельзя использовать для соответствия «любой клавише». (Примечание. Этот фрагмент требует ссылки на System.Windows.Interactivity, а CommandParameter не является обязательным.) – kmote

+0

@kmote Каков синтаксис CommandParameter в этом случае? Из того, что я читаю, передача EventArgs в качестве параметра не поддерживается из коробки. –

+1

@JoshNoe: Отличный вопрос, и я боюсь, что не знаю. Синтаксис CommandParameter можно увидеть в предварительно отредактированной версии этого ответа, но я считаю, что он предназначен только для использования с передачей значения свойства (например, значения в соседнем элементе) в качестве параметра связанной команды, не для EventArgs. – kmote

-1

Найдено ответ:

<Interactivity:Interaction.Triggers> 
    <Interactivity:EventTrigger EventName="PreviewKeyDown" > 
     <command:EventToCommand Command="{Binding ChangeIdCommand}" PassEventArgsToCommand="True" /> 
    </Interactivity:EventTrigger> 
</Interactivity:Interaction.Triggers> 
Смежные вопросы