Silverlight:DataGrid就像在ItemsControl中进行分组一样

时间:2010-01-07 11:39:30

标签: silverlight listbox grouping itemscontrol

是否可以在Silverlight中的ItemsControl或Listbox中对项目进行分组?这些控件绑定到DomainDataSource。

或者是否有任何第三方控件可以执行此操作?

更新

这是我想要创建的UI。

alt text

4 个答案:

答案 0 :(得分:5)

您可以使用绑定到PagedCollectionView的嵌套ItemsControls来执行此操作。

假设我有一个数据源 - MyItems - 包含字段:CategorySectionOption。我可以从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)