是否可以在 Silverlight 的 ItemsControl 或 Listbox 中对项目进行分组?这些控件绑定(bind)到 DomainDataSource。
或者是否有任何第三方控件可以做到这一点?
更新:
这是我正在尝试创建的那种 UI。
最佳答案
您可以使用嵌套的 ItemsControls
来做到这一点。绑定(bind)到 PagedCollectionView .
假设我有一个数据源 - 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"))
然后我绑定(bind)我的第一个
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 或其他控件,并使用模板等进行自定义。
关于Silverlight:Datagrid 类似于 ItemsControl 中的分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2019942/