Wpf 如何绑定要作为命令参数传递的列的属性名

Wpf 如何绑定要作为命令参数传递的列的属性名,wpf,xaml,mvvm,wpfdatagrid,Wpf,Xaml,Mvvm,Wpfdatagrid,在每个DataGridColumnHeader上,我都有一个用于打开弹出窗口的按钮。作为参数,它将列的绑定属性名发送到我的ViewModel中的ICommand 这适用于任何DataGridTextColumn,但是当涉及DataGridComboxColumn时,结构是不同的 我该如何解决这个问题 <Button Command="{Binding DataContext.OpenFilterCommand, RelativeSource={Rela

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

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

我该如何解决这个问题

<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>

就像我在前面的问题中提到的,如何获取
DataGridTextColumn
的值,我建议使用
Column.Binding.Path.Path
获取绑定属性名

但在这种情况下,这不起作用,因为
datagridcomboxcolumn
没有任何绑定属性。如果语法与您在上述问题中提到的类似,您可以得到如下结果:

对于
所选值
,即
公司

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


解释

TemplatedParent(DataGridColumnHeader)--->Column(DataGridComboxColumn)--->EditingElementStyle(EditingElementStyle)--->设置器(1)(从样式中获取第一个设置器)--->值(设置器值)--->路径(PropertyPath)--->路径(实际属性名称)


如果要获取
ItemsSource
属性名称,请将
Setters[1]
替换为
Setters[0]

在这种情况下,您要传递哪个属性名称
ItemsSource
name或
SelectedValue
name?Company,因此SelectedValue或它们中的任何一个。我添加了一个答案。看看这是否有帮助。