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