我已经看到了几个类似的问题,所以请不要快速解雇。这种情况在这里似乎有所不同,我不明白为什么会出错。我的DataGrid
对键和鼠标点击有一些绑定:
<DataGrid x:Name="gridStudents" ItemsSource="{Binding Source={StaticResource cvsStudentList}}"
Margin="2"
Height="250"
SelectedItem="{Binding SelectedStudentItem, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" SelectionChanged="gridStudents_SelectionChanged">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /}" />
<KeyBinding Key="Delete" Command="{Binding DeleteStudentButtonClickCommand}" />
</DataGrid.InputBindings>
由于StackOverflow和现有的用户贡献,我找到了这种方法。非常感谢。
此问题与MouseBinding CommandParameter
有关。程序执行正常,没有任何警告。我可以双击DataGrid
中的任何一行,它的行为与设计相符。
但是如果我检查Visual Studio 2015中的输出窗口,我可以看到这句话:
System.Windows.Data错误:40:BindingExpression路径错误:''找不到'当前收集项'''OCLMEditorModelView'(HashCode = 43686667)'。 BindingExpression:路径= /; DataItem ='OCLMEditorModelView'(HashCode = 43686667); target元素是'MouseBinding'(HashCode = 49684624); target属性是'CommandParameter'(类型'Object')
为什么这么说?我使用/
,因为ItemSource
是CollectionViewSource
对象,我理解/调用当前选定的项目。但是在我实际上双击一行之前,这个命令不应该触发。
很好奇我如何能够阻止它出现在我的输出窗口中。
如果我尝试按照答案更改绑定,我会收到此异常:
更新
这是当前的XAML:
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /, Source={RelativeSource Self}}" />
但现在我在输出窗口注意到了这一点:
System.Windows.Data错误:40:BindingExpression路径错误:'' “当前收藏品”'''RelativeSource'上找不到的物业 (的HashCode = 472027)”。 BindingExpression:路径= /; DataItem ='RelativeSource'(HashCode = 472027);目标元素是 'MouseBinding'(HashCode = 36454430);目标属性是 'CommandParameter'(类型'对象')
它似乎工作(我可以双击一行,它做我想要的)。那么我可以停止此输出警告吗?
更新
所以这是当前的XAML:
<DataGrid x:Name="gridStudents" ItemsSource="{Binding StudentsView}"
Margin="2"
Height="250"
SelectedItem="{Binding SelectedStudentItem, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" IsReadOnly="True" IsSynchronizedWithCurrentItem="True" SelectionChanged="gridStudents_SelectionChanged">
<DataGrid.InputBindings>
<MouseBinding
MouseAction="LeftDoubleClick"
Command="{Binding EditStudentButtonClickCommand}"
CommandParameter="{Binding /, Source={RelativeSource Self}}" />
<KeyBinding Key="Delete" Command="{Binding DeleteStudentButtonClickCommand}" />
</DataGrid.InputBindings>
<DataGrid.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="VerticalContentAlignment" Value="Center"/>
</Style>
</DataGrid.CellStyle>
我尝试做的事情没有改变 - 当用户双击DataGrid行(对于cvs来说是boudn)时,它会调用基于该行的命令。
答案 0 :(得分:2)
在输入绑定的上下文中,DataContext
不应该更改,所以我希望正确的绑定是:
CommandParameter="{Binding Path=/, Source={StaticResource cvsStudentList}}"
除此之外,您还可以通过SelectedItem
绑定到RelativeSource
,这应该是等效的。
CommandParameter="{Binding Path=SelectedItem,
RelativeSource={RelativeSource AncestorType=DataGrid}}"