我试图将组合框中的项目组织成组。为此,我创建了一个具有项目和组名字符串的对象。然后我设置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>
有没有人知道我哪里出错了?
答案 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}}"