我希望在我的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();
答案 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" />