WPF中的键盘快捷方式路由到ViewModel

时间:2011-11-29 21:10:27

标签: c# .net wpf xaml mvvm

我希望在我的ViewModel中接收命令(即根本没有代码)。我在视图中设置了KeyBindings,但我不确定如何在视图模型上构造命令,我该怎么做?我已经尝试了下面的代码,但从未调用过。

我在输出窗口中收到此错误

  

BindingExpression路径错误:找不到'ShowHelp'属性   'object'''String'(HashCode = -1833871577)'。   BindingExpression:路径= ShowHelp;的DataItem = '字符串'   (的HashCode = -1833871577);目标元素是'KeyBinding'   (的HashCode = 60325168); target属性是'Command'(类型'ICommand')

viewModel的定义如下:(注意这适用于窗口中的所有其他绑定)

<app:ViewModel x:Key="viewModel"></app:ViewModel>

XAML:

<Window.InputBindings>
    <KeyBinding Command="{Binding ShowHelp, Source=viewModel}" Gesture="ALT+H" />
</Window.InputBindings>

ViewModel代码

这是我开始使用ViewModel代码执行命令的地方,如果这是错误请告知:)

public class ShowHelpCommand : ICommand
{
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        Console.WriteLine("SHOW HELP");
    }
}
public ICommand ShowHelp { get;  set; }
ShowHelp = new ShowHelpCommand();

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用DelegateCommand&lt; T&gt;在Microsoft Prism Library(http://msdn.microsoft.com/en-us/library/ff653940.aspx

您的代码看起来像这样:

ShowHelp = new DelegateCommand<object>(param => MethodToExecute)
private void MethodToExecute(object param) {
    //...
}

如果您不想在项目中包含Prism库,那么滚动您自己的委托命令实现非常容易,您需要做的就是实现ICommand接口并传入并存储Action和Func并执行他们在执行Execute和CanExecute。

答案 1 :(得分:1)

不是缺少StaticResource吗?

<KeyBinding Command="{Binding ShowHelp, Source={StaticResource viewModel}}" Gesture="ALT+H" />
相关问题