如何绑定属性名称绑定到哪个列作为命令参数传递

时间:2014-04-02 07:20:30

标签: wpf xaml mvvm wpfdatagrid

在每个DataGridColumnHeader上,我有一个用于打开弹出窗口的按钮。作为参数,它将列的绑定属性名称发送到我的ViewModel中的ICommand。

这适用于任何DataGridTextColumn但是当涉及DataGridComboBoxColumn时,结构是不同的。

我该如何解决这个问题?

<Button Command="{Binding DataContext.OpenFilterCommand, 
                  RelativeSource={RelativeSource AncestorType=UserControl}}"
        CommandParameter="{Binding Column.Binding.Path.Path, 
                  RelativeSource={RelativeSource Mode=TemplatedParent}}"/>

问题列定义

<DataGridComboBoxColumn Header="Company" >
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.CompanyCollection}"/>
            <Setter Property="IsReadOnly" Value="True"/>
            <Setter Property="SelectedValue" Value="{Binding Company}"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.CompanyCollection}"/>
            <Setter Property="SelectedValue" Value="{Binding Company}"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

1 个答案:

答案 0 :(得分:2)

就像我在上一个问题here中提到的那样,如何获得DataGridTextColumn的值,我建议使用Column.Binding.Path.Path获取绑定的属性名称。

但是在这种情况下,由于DataGridComboBoxColumn没有任何绑定属性,因此无法工作。如果语法与您上面提到的语法类似,您可以这样:

对于SelectedValue,即Company

<Button Command="{Binding DataContext.OpenFilterCommand, 
                  RelativeSource={RelativeSource AncestorType=UserControl}}"
        CommandParameter="{Binding 
                   Column.EditingElementStyle.Setters[1].Value.Path.Path, 
                  RelativeSource={RelativeSource Mode=TemplatedParent}}"/>

<强>说明

  

TemplatedParent( DataGridColumnHeader ) - &gt;列( DataGridComboBoxColumn ) - &gt; EditingElementStyle( EditingElementStyle ) - &gt; Setters(1)(从样式获得第一个setter) - &gt;值( Setter Value ) - &gt;路径( PropertyPath ) - &gt;路径(实际PropertyName

如果您想获取ItemsSource媒体资源名称,请将Setters[1]替换为Setters[0]