使用列数据填充GridView标头中的ComboBox

时间:2009-05-18 10:19:31

标签: wpf gridview combobox

我想在ComboBox(当前位于GridView内)的标题单元格中填充ListView,其中填充了该列中的数据。有点像Excel中的“自动过滤器”功能。

我遇到的问题是我无法从标题单元格内部获取列的数据。目前,我有这样的事情:

<Grid>
  <Grid.Resources>
    <DataTemplate x:Key="headerTemplate">
     <StackPanel>
        <ComboBox></ComboBox>
      <TextBlock FontSize="16" Text="{Binding}" Grid.Row="1" HorizontalAlignment="Center"/>
      </StackPanel>
    </DataTemplate>
  </Grid.Resources>
  <ListView Width="400" Height="200">
    <ListView.View>
      <GridView ColumnHeaderTemplate="{StaticResource headerTemplate}">
          <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
          <GridViewColumn Header="Namespace" DisplayMemberBinding="{Binding Namespace}"/>
      </GridView>
    </ListView.View>
    <x:Type TypeName="Visual"/>
    <x:Type TypeName="UIElement"/>
    <x:Type TypeName="FrameworkElement"/>
  </ListView>
</Grid>

但我不知道如何让数据填充标题中的组合框。这样做的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

快速而肮脏的方式是这样的:

<Grid.Resources>
    <DataTemplate x:Key="headerTemplate">
        <StackPanel>
            <ComboBox ItemsSource="{Binding Path=Items, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}}}" DisplayMemberPath="{Binding}"/>
            <TextBlock FontSize="16" Text="{Binding}" Grid.Row="1" HorizontalAlignment="Center"/>
        </StackPanel>
    </DataTemplate>
</Grid.Resources>

如果您确实需要类似过滤器的列表,则必须弄清楚如何仅获取不同的值。