Combobox没有显示分组

时间:2016-05-11 17:28:24

标签: c# .net wpf xaml combobox

我试图将组合框中的项目组织成组。为此,我创建了一个具有项目和组名字符串的对象。然后我设置GroupStyle和ItemTemplate来显示这些值。但是,目前,只有项目字符串显示在组合框中(并且框中有一个红色边框,表示存在某种错误)。

这是我的组合框的xaml:

<ComboBox x:Name="comboBoxProjects" Margin="165,90,28,0" Grid.Column="0" VerticalAlignment="Top" Height="25"
    IsSynchronizedWithCurrentItem="True" SelectedIndex="0" Style="{StaticResource ComboBoxDefault}" 
    ItemsSource="{Binding Path=ProjectClientSelections.ProjectGroupItems,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    SelectedItem="{Binding Path=ProjectClientSelections.SelectedProject, UpdateSourceTrigger=PropertyChanged}"> 

    <ComboBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding GroupName}"/>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </ComboBox.GroupStyle>

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Project}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>

</ComboBox>

有没有人知道我哪里出错了?

1 个答案:

答案 0 :(得分:1)

GroupStyle中,DataContext不是您的项目(ItemsSource中包含的类型),而是CollectionViewGroup对象,它是根据您分组的项目集合形成的。因此,您必须声明CollectionViewGroup中某个属性的绑定路径,例如,根据您的代码,您可能希望使用Name属性。见MSDN CollectionViewGroup Class

将您的GroupStyle.HeaderTemplate更改为:

<DataTemplate>
    <TextBlock Text="{Binding Name}" />
</DataTemplate>

您无法展示您是如何形成GroupDescriptions的。如果您尚未对项目进行分组,则可以按以下方式进行分组(假设您提供的XAML包含在Window和Window中,而GroupBox的DataContext是相同的):

<Window.Resources>
    <CollectionViewSource
        Source="{Binding ProjectClientSelections.ProjectGroupItems}"
        x:Key="GroupedProjectItems">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription
                PropertyName="GroupName" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>

此更改后GroupBox ItemSource绑定到以下内容(直接发送到CollectionViewSource资源):

ItemsSource="{Binding Source={StaticResource GroupedProjectItems}}"