2010-08-20 33 views
1

我想从我的视图模型与F8相关的命令,并不知道有关输入手势很多。我必须将它包装在路由命令中吗?还是有另一种推荐的方法来执行此操作?继电器/委托命令和InputGestures

干杯,
Berryl

UPDATE

我原来的帖子确实曾在他们二痛点。第一个是,在WPF 4之前,你不能直接绑定一个命令到输入手势或者计算命令的DataContext的可视化继承,并且必须通过CommandManager层。这似乎是NVM指出的MVVM工具包的CommandReference有用的原因,但现在使用WPF 4时,由于命令是InputBinding上的附加DP,因此您需要做的只是类似于:

<DataGrid.InputBindings> 
    <KeyBinding Command="{Binding MyViewModel.MyCommand}" Key="F8" /> 
</DataGrid.InputBindings> 

要实现的第二个痛点是将输入手势绑定到命令与将该手势的文本表示与菜单项相关联不同。所以,我需要做的是这样的:

<MenuItem Header="{x:Static s:Strings.MyHeaderString}" Command="{Binding MyViewModel.MyCommand}" 
    InputGestureText="F8"/> 

我希望拼写这一点,有人要么告诉我,我有什么不对(或右)。假设这是你可以做的最好的事情,那么这取决于你可以获得多少DRYness,以及如何做到这一点,同时严格保留ViewModel中的视觉元素。你可以通过在你的命令(即KeyGesture,KeyModifier)上拥有一些属性或者在我想的资源文件中拥有“F8”来实现这一点,这取决于你需要重用多少东西和你的观点。还有关于你有多少输入手势!

回答

3

How do I associate a keypress with a DelegateCommand in Composite WPF?

这是你的答案。而不是键=“X”,你应该使用手势=“F8”

+0

感谢您的答复。我没有使用MVVM工具包,但会看看它是如何做到的。它看起来像WPF 4可以避免需要按照[这里]描述的方式创建自己的Freezable(http://blogs.msdn.com/b/llobo/archive/2009/10/29/new-wpf-features-key- gesture-binding.aspx?wa = wsignin1.0),但我需要多消化一下。我不希望花费太多时间来弄清楚如何让F8键在一个命令上工作,但也许是值得的。干杯 – Berryl 2010-08-20 19:37:59

+0

你真的不需要这个工具包。 CommandReference是一个非常简单的类。您可以将该课程添加到您的项目中,并以您的快乐方式。这就是说我宁愿自己使用内置的WPF。 – NVM 2010-08-20 20:05:01

+0

我最终创建了一个类,它为我的命令添加了InputGestureText和GestureKey(以及其他一些属性),所以我可以在MenuItem中绑定前者,在KeyBinding中绑定后者。我打电话给班级CommandReference,所以道具给你。干杯 – Berryl 2010-08-25 20:14:11