是否可以在Silverlight中的ItemsControl或Listbox中对项目进行分组?这些控件绑定到DomainDataSource。
或者是否有任何第三方控件可以执行此操作?
更新
这是我想要创建的UI。
答案 0 :(得分:5)
您可以使用绑定到PagedCollectionView的嵌套ItemsControls
来执行此操作。
假设我有一个数据源 - MyItems
- 包含字段:Category
,Section
和Option
。我可以从PagedCollectionView
创建IEnumerable(of MyItems)
并告诉它要分组的字段。
Dim original As IEnumerable(Of MyItems) = GetMyItems()
Dim pcv = New PagedCollectionView(original)
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Category"))
pcv.GroupDescriptions.Add(New PropertyGroupDescription("Section"))
然后我将第一个ItemsControl
绑定到PagedCollectionView
hisMyItems.ItemsSource = pcv.Groups
PCV
创建一个嵌套的层次结构,如:
-Name
-Items
其中Name
是分组字段中的值,Items
包含该分组中的行/对象。我猜你也可以在xaml中创建PCV,如果你愿意的话。
xaml看起来像:
<controls:HeaderedItemsControl x:Name="hisMyItems" Header="{Binding Name}" ItemsSource="{Binding Items}" >
<controls:HeaderedItemsControl.ItemTemplate>
<DataTemplate>
<controls:HeaderedItemsControl Header="{Binding Name}" ItemsSource="{Binding Items}" ItemsPanel="{StaticResource ItemsPanelTemplate1}" >
<controls:HeaderedItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Option}" />
</DataTemplate>
</controls:HeaderedItemsControl.ItemTemplate>
</controls:HeaderedItemsControl>
</DataTemplate>
</controls:HeaderedItemsControl.ItemTemplate>
</controls:HeaderedItemsControl>
我希望这是有道理的。我试图从我的实际应用程序中简化一些事情,但我可能在复制它时犯了一些错误。显然,您也可以使用普通的ItemsControls或其他控件,并使用模板等进行自定义。
答案 1 :(得分:0)
DataGrid控件支持分组。
Tim Heuer有一个关于使用数据网格进行分组的好博客。 link text
答案 2 :(得分:0)
您正在寻找的控件可能是来自Toolkit的Accordian Control。
参见Accordian行为样本here。
请注意,实际外观与任何其他控件一样具有样式。基本功能是对项目的类别进行分组,否则这些项目将成为直接列表。
答案 3 :(得分:0)