BindingExpression路径错误:''找不到'当前收集项'的属性'... BindingExpression:Path = /;

时间:2016-06-27 15:48:21

标签: c# wpf xaml binding commandparameter

我已经看到了几个类似的问题,所以请不要快速解雇。这种情况在这里似乎有所不同,我不明白为什么会出错。我的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')

为什么这么说?我使用/,因为ItemSourceCollectionViewSource对象,我理解/调用当前选定的项目。但是在我实际上双击一行之前,这个命令不应该触发。

很好奇我如何能够阻止它出现在我的输出窗口中。

如果我尝试按照答案更改绑定,我会收到此异常:

Exception error

更新

这是当前的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)时,它会调用基于该行的命令。

1 个答案:

答案 0 :(得分:2)

在输入绑定的上下文中,DataContext不应该更改,所以我希望正确的绑定是:

CommandParameter="{Binding Path=/, Source={StaticResource cvsStudentList}}"

除此之外,您还可以通过SelectedItem绑定到RelativeSource,这应该是等效的。

CommandParameter="{Binding Path=SelectedItem,
                           RelativeSource={RelativeSource AncestorType=DataGrid}}"