我正在开发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/

10-12 04:19