使用列数据在GridView标题中填充组合框
问题描述:
我希望在我的GridView
(当前在ListView
的内部)填充来自该列的数据的标题单元格中具有ComboBox
。有点像使用Excel中的“自动过滤器”功能。使用列数据在GridView标题中填充组合框
我遇到的问题是我无法从标题单元格中获取列的数据。目前,我有这样的事情:
<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>
但我不知道如何获取数据来填充标题中的组合框。这样做的最好方法是什么?
答
一个快速和肮脏的方法是这样的:
<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>
如果你真的需要一个过滤器般列表,你必须弄清楚如何只得到不同的值。