我们正在构建一个包含 DataGrid 的 WPF 应用程序,如果双击该行,它应该在当前选定的行上调用一个函数。我们的目标是尽可能采用 MVVM 方法,尽量避免事件。
因为我在以前的应用程序中为 DataGrid 做了类似的事情,所以我认为这会起作用:
<DataGrid.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding ShowDetailsCommand}"/>
</DataGrid.InputBindings>
在此工作应用程序中,ShowDetailsCommand
指向一个方法,该方法通过数据绑定访问当前选定的 DataGrid 项SelectedItem
。
在新项目中尝试同样的方法似乎根本不起作用。命令指向的方法永远不会被调用(使用断点和控制台输出进行测试),并且也没有关于在 DataContext 中找不到命令的错误消息。我们也尝试将<InputBindings>
块直接移动到 Window 对象中,只是为了测试 DataContext 是否可能进一步向下更改,但双击仍然没有反应。
据我所知,两个 DataGrid 之间的唯一主要区别是:
- 旧的
ItemsSource
绑定到对象集合,而新的绑定是通过在设计器中将 DataSet 拖到其上来创建的 - 旧项目的 DataContext 是一个单独的 ViewModel 类,而新项目是窗口自己的 Codebehind 类(
DataContext="{Binding RelativeSource={RelativeSource Mode=Self}}"
在 Window 上声明)
这些中的任何一个都可能是 InputBinding 不起作用的原因吗?如果没有,我们还有什么可能做错的吗?抱歉,如果这没有足够的信息,我只是非常不确定问题可能出在哪里。如果需要,我将尝试提供有关代码的更多信息。