在 ComboBox 中对项目进行分组
Posted
技术标签:
【中文标题】在 ComboBox 中对项目进行分组【英文标题】:Grouping items in a ComboBox 【发布时间】:2011-04-04 20:13:15 【问题描述】:我有一个 ListView,其中包含两种类型的对象,单个和多个。 单个是一个普通的 TextBlock,而多个是一个带有项目的 ComboBox。
我正在尝试对 ComboBox 中的项目进行分组,但没有成功。可能吗?还是我应该采用不同的方法?
我想要达到的目标:
[ComboBox v]
[Header ]
[ Item]
[ Item]
[Header ]
[ Item]
【问题讨论】:
对我来说听起来更像 TreeView。 我同意...我先做了一个树形视图,但最终用户想要一个组合框... 【参考方案1】:这是可能的。使用带有 GroupDescription 的 ListCollectionView 作为 ItemsSource,只需为您的 ComboBox 提供 GroupStyle。请参阅下面的示例:
XAML:
<Window x:Class="***.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:***"
xmlns:uc="clr-namespace:***.UserControls"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<ComboBox x:Name="comboBox">
<ComboBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Binding Name"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ComboBox.GroupStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="Binding Name"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</Window>
代码隐藏:
namespace ***
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
//this.comboBox.DataContext = this;
List<Item> items = new List<Item>();
items.Add(new Item() Name = "Item1", Category = "A" );
items.Add(new Item() Name = "Item2", Category = "A" );
items.Add(new Item() Name = "Item3", Category = "A" );
items.Add(new Item() Name = "Item4", Category = "B" );
items.Add(new Item() Name = "Item5", Category = "B" );
ListCollectionView lcv = new ListCollectionView(items);
lcv.GroupDescriptions.Add(new PropertyGroupDescription("Category"));
this.comboBox.ItemsSource = lcv;
public class Item
public string Name get; set;
public string Category get; set;
【讨论】:
感谢您帮助我们!帮助很大!上帝保佑。 我试过你的解决方案,它的工作原理。但是我无法获得选定的值,我尝试使用 combobox.SelectedItem.ToString() 但它没有返回预期的结果。你有想法吗 ?谢谢 抱歉,Bluety 延迟了两年,但我遇到了类似的问题,因为我的基础属性(字符串)与 SelectedItem 类型(我的 Item 类)不匹配,并且从未发生绑定。绑定到 SelectedValue 而不是 SelectedItem 解决了问题 其实绑定SelectedValue而不是SelectedItem可以解决问题,但是不会携带组信息。将绑定的属性类型更改为 Item 类修复了它。 这太棒了。但我发现它有点令人困惑,因为 Header Template 和 Item Template 都绑定到一个名为“Name”的属性。如果将 Item.Name 属性重命名为(例如)Item.Description 会更清楚,然后在 XAML 中,Header Template 将绑定到 ListCollectionView 中的隐式“Name”属性,并且 Item Template 将绑定到“描述”。尽管如此,还是很好的例子 - 谢谢。以上是关于在 ComboBox 中对项目进行分组的主要内容,如果未能解决你的问题,请参考以下文章