我正在开发MVVM应用程序。我有一个主窗口,看起来或多或少像这样:
<Window>
<ContentControl Content={Binding ContentViewModel} />
</Window>
然后,我有了这个ViewModel,它公开了一定数量的Command,并且我希望这些命令既可以从UI(带有按钮等)也可以从用户(使用KeyBindings)从键盘使用。
这些命令可以从UI按钮正常工作。但是键绑定(bind)并不总是有效,在我看来,问题在于加载的 View 并非始终处于焦点位置。
这是该 View 的代码。
<UserControl>
<UserControl.InputBindings>
<KeyBinding Key="Delete" Command="{Binding RemoveEntityCommand, ElementName=Designer}" />
</UserControl.InputBindings>
<Grid>
<namespace:Designer x:Name="Designer" />
</Grid>
</UserControl>
如何为MVVM应用程序永久解决此问题?我已经多次遇到此问题。
注意:为简单起见,删除了所有 namespace 声明。
谢谢。
最佳答案
我可能会将Command附加到Window
的KeyDown或KeyUp事件而不是UserControl
,然后从那里路由它。
可以将其路由到ShellViewModel
,然后根据需要将其传递到当前的ContentViewModel
,或者使用某种广播特殊键组合的消息系统,ViewModel可以订阅它们。
关于.net - MVVM应用程序中的 subview 焦点可查看Command,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7519425/