2009-05-18 7 views
2

Je souhaite avoir un ComboBox dans les cellules d'en-tête de mon GridView (actuellement à l'intérieur d'un ListView) rempli avec les données de cette colonne. A utiliser un peu comme la fonction 'auto-filtre' dans Excel.Remplir la zone de liste déroulante dans l'en-tête GridView avec les données de colonne

Le problème que j'ai est que je ne peux pas accéder aux données de la colonne depuis l'intérieur de la cellule d'en-tête. À l'heure actuelle, j'ai quelque chose comme ceci:

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

Mais je ne suis pas sûr de savoir comment obtenir les données pour alimenter les zones de liste déroulante dans l'en-tête. Quelle est la meilleure façon de faire cela?

Répondre

1

Un moyen rapide et sale serait quelque chose comme ceci:

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

Si vous avez vraiment besoin d'une liste comme filtre, vous devrez comprendre comment obtenir des valeurs distinctes uniquement.