tags:

views:

801

answers:

1

I want to have a combo box in the header cells of my GridView (currently inside of a ListView) populated with the data from that column. To be used a bit like the 'auto filter' feature in Excel.

The problem I have is I can't get to the data for the column from inside the header cell. At the moment, I have something like this:

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

But I'm not sure how to get the data to populate the combo boxes in the header. What's the best way of doing this?

A: 

A quick and dirty way would be something like this:

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

If you really need a filter-like list, you'll have to figure out how to get distinct values only.

Stanislav Kniazev