将WPF ShortCut键绑定到ViewModel中的命令 [英] Binding a WPF ShortCut Key to a Command in the ViewModel

查看:224
本文介绍了将WPF ShortCut键绑定到ViewModel中的命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用MVVM模式的WPF应用程序。挂起虚拟机的按钮是非常简单的,因为它们实现了ICommand。我有一个类似的上下文菜单。下一步是为上下文菜单创建快捷键。我不知道如何获取快捷键调用命令。以下是一个例子:

 < MenuItem Header =UpdateCommand ={Binding btnUpdate}> 
< MenuItem.Icon>
< Image Source =/ Images / Update.png
宽度=16
Height =16/>
< /MenuItem.Icon>
< / MenuItem>

现在我添加了这个:

 < Window.InputBindings> 
< KeyBinding Key =U
修饰符=控制
Command ={Binding btnUpdate}/>
< /Window.InputBindings>

尝试将快捷键连接到相同的绑定,但这不起作用。错误是:


错误169'KeyBinding'类型的'Command'属性无法设置'Binding'。 绑定只能在DependencyObject的DependencyProperty上设置。


没有办法将此事件挂起命令?我不能想出这一点。



提前感谢!



Bill

解决方案

我写了一个自定义标记扩展将绑定 InputBindings 命令,可以几乎像一个真正的绑定:

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

请注意,此标记扩展使用私有反射,因此只能在应用程序全部运行时使用信任...



另一个选项是使用 CommandReference 类。可以在MVVM工具包中找到 here 。这可能是一个更干净的方法,但使用起来有点复杂。



请注意,在WPF 4中, InputBinding.Command InputBinding.CommandParameter InputBinding.CommandTarget 属性是依赖属性,因此它们可以正常绑定


I have a WPF app that is using the MVVM pattern. Hooking up buttons to the VM is pretty straight forward since they implement the ICommand. I have a context menu that works similar. The next step is to create shortcut keys for the context menu. I can't figure out how to get the shortcut key invoke the Command. Here is an example:

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

now I've added this:

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

to try and connect the shortcut keys to the same binding, but this doesn't work. The error is:

Error 169 A 'Binding' cannot be set on the 'Command' property of type 'KeyBinding'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

Isn't there a way to hook up this event to the Command? I can't figure this out.

thanks in advance!

Bill

解决方案

I wrote a custom markup extension to "bind" InputBindings to commands, which can be used almost like a real binding :

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

Note that this markup extension uses private reflection, so it can only be used if your application runs in full trust...

Another option is to use the CommandReference class. It can be found in the MVVM toolkit available here. It's probably a cleaner approach, but a bit more complex to use.

Note that in WPF 4, the InputBinding.Command, InputBinding.CommandParameter and InputBinding.CommandTarget properties are dependency properties, so they can be bound normally

这篇关于将WPF ShortCut键绑定到ViewModel中的命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆