WPF 棱镜统一容器。将键盘焦点设置在用户控件或用户控件网格父级上

WPF Prism Unity Container. Setting keyboard focus on usercontrol or usercontrol grid parent

我正在开发一个利用 WPF、使用 Prism 库和 Unity 容器的项目。

我有一个主窗口,其中包含一个 mainviewmodel 控件,该控件又由一组用户控件填充。

我的目标是将键盘焦点设置到我有一个 EventTrigger InvokeCommandAction 的 mainviewmodel,它对 keyeventsargs 做出反应...

目前,如果我在控件(或子控件)中使用文本框,则这是触发命令的唯一方式。我的目标是让 mainviewmodel 控件或网格获取并保留键盘焦点。

如有任何提示,我们将不胜感激! //内森

要么没有正确理解你的问题,要么你应该回顾一下 WPF 实现中 MVVM 的基本概念。

View 是 WPF 控件。
WPF Window/UserControl 个文件包含 WPF 标记,即视图。

视图中的控件利用 DataBindings 到控件本身或包含控件(它将继承)的父控件的 DataContext 属性。

DataContext 属性 设置为 ViewModel 对象的实例。它包含保存值的属性和执行操作的命令。

所以概念上没有 "mainviewmodel control",有一个包含控件的 MainView,在这种情况下可能将其 DataContext 属性 设置为 MainViewModel 的一个实例。 (因此我感到困惑)

最后,虽然这是可能的,有些人甚至可能会建议在视图模型中编写 UI rules/logic,但我没有发现它有什么好处。

最好将 UI 逻辑放在 XAML 或后面的 MinView 代码中。您仍然可以通过将 MainView.DataContext 属性 转换为 MainViewModel 来访问后面代码中的 MainViewModel。

例如: MainView.KeyDown 事件可以连接起来调用 MainViewModel.CommandX.Execute();