为什么这个 DataGrid 鼠标输入绑定在一个项目中有效,而在另一个项目中却无效?

Why does this DataGrid mouse input binding work in one project, but not in another?

我们正在构建一个包含 DataGrid 的 WPF 应用程序,如果双击该行,该应用程序应该在当前选定的行上调用一个函数。我们的目标是尽可能采用 MVVM 方法,尽量避免事件。

因为我在以前的应用程序中为 DataGrid 做了类似的事情,所以我认为这会起作用:

<DataGrid.InputBindings>
    <MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ShowDetailsCommand}"/>
</DataGrid.InputBindings>

在此工作应用程序中,ShowDetailsCommand 指向一个方法,该方法通过数据绑定到 SelectedItem 来访问当前选定的 DataGrid 项。

在新项目中尝试同样的方法似乎根本不起作用。命令指向的方法永远不会被调用(使用断点和控制台输出进行测试),也没有关于在 DataContext 中找不到命令的错误消息。我们还尝试将 <InputBindings> 块直接移动到 Window 对象中,只是为了测试 DataContext 是否可能已经进一步向下更改,但双击仍然没有反应。

据我所知,这两个 DataGrid 之间的主要区别是:

这两个原因中的任何一个都会导致 InputBinding 无法正常工作吗?如果没有,我们还有什么地方做错了吗?抱歉,如果信息不够,我只是不确定问题出在哪里。如果需要,我会尝试提供有关代码的更多信息。

尝试使用 RelativeSource:

绑定到父 window 的 DataContextShowDetailsCommand
Command="{Binding DataContext.ShowDetailsCommand, 
    RelativeSource={RelativeSource AncestorType=Window}}"