Привязка сочетания клавиш WPF к команде в ViewModel

У меня есть приложение WPF, которое использует шаблон MVVM. Кнопки присоединения к VM являются довольно прямыми, так как они реализуют ICommand. У меня есть контекстное меню, которое работает подобное. Следующий шаг должен создать сочетания клавиш для контекстного меню. Я не могу выяснить, как добраться, сочетание клавиш вызывают Command. Вот пример:

<MenuItem Header="Update" Command="{Binding btnUpdate}" >
    <MenuItem.Icon>
        <Image Source="/Images/Update.png"
               Width="16"
               Height="16" />
        </MenuItem.Icon>
    </MenuItem>

теперь я добавил это:

<Window.InputBindings>
    <KeyBinding Key="U"
                Modifiers="Control" 
                Command="{Binding btnUpdate}" />
</Window.InputBindings>

чтобы попытаться подключить сочетания клавиш к той же привязке, но это не работает. Ошибка:

Ошибочные 169 А 'Привязка' не могут быть установлены на свойстве 'Command' типа 'Привязка клавиш'. 'Привязка' может только быть установлена на DependencyProperty DependencyObject.

Разве там путь не состоит в том, чтобы поднять трубку это событие к Команде? Я не могу понять это.

заранее спасибо!

Счет

38
задан JiBéDoublevé 23 April 2014 в 17:23
поделиться

3 ответа

Я написал настраиваемое расширение разметки для «привязки» InputBindings к командам, которые можно использовать почти как реальная привязка:

<UserControl.InputBindings>
    <KeyBinding Modifiers="Control" 
                Key="E" 
                Command="{input:CommandBinding EditCommand}"/>
</UserControl.InputBindings>

Обратите внимание, что это расширение разметки использует частное отражение, поэтому его можно использовать только в том случае, если ваше приложение работает с полным доверием ...

Другой вариант - использовать класс CommandReference . Его можно найти в наборе инструментов MVVM, доступном здесь . Вероятно, это более чистый подход, но он немного сложнее в использовании.

Обратите внимание, что в WPF 4 свойства InputBinding.Command , InputBinding.CommandParameter и InputBinding.CommandTarget являются свойствами зависимости, поэтому их можно связывать обычным образом.

27
ответ дан 27 November 2019 в 03:32
поделиться

Альтернативный подход для привязки WPF Shortcut Key к свойству Command модели ViewModel показан в примере ShortcutKey проекта WPF Application Framework (WAF) .

-1
ответ дан 27 November 2019 в 03:32
поделиться

Я согласен, что делать это в XAML идеально, но для полноты картины вы также можете добавить ваша привязка в коде. Если вы сделаете это в конструкторе, просто убедитесь, что это происходит после вызова InitializeComponent ()

InputBindings.Add(new KeyBinding(btnUpdate, new KeyGesture(Key.U, ModifierKeys.Control));
8
ответ дан 27 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: