【问题标题】:Silverlight: Datagrid like grouping in ItemsControlSilverlight:Datagrid 类似于 ItemsControl 中的分组
【发布时间】:2010-01-07 11:39:29
【问题描述】:

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

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

更新:

这就是我正在尝试创建的那种 UI。

【问题讨论】:

    标签: silverlight listbox grouping itemscontrol


    【解决方案1】:

    您可以通过使用绑定到PagedCollectionView 的嵌套ItemsControls 来做到这一点。

    假设我有一个数据源 - MyItems - 带有字段:CategorySectionOption。我可以从 IEnumerable(of MyItems) 创建一个 PagedCollectionView 并告诉它要分组的字段。

    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 或其他控件,并使用模板等进行自定义。

    【讨论】:

      【解决方案2】:

      DataGrid 控件支持分组。

      Tim Heuer 有一篇关于使用数据网格进行分组的好博客。 link text

      【讨论】:

      • 是的,我知道,但数据网格并不真正适合我想要的。我想为每一行显示一个控件(例如按钮),但这些需要水平而不是垂直包装。因此,在 ItemsControl 中,您可以设置 ItemsPanel 的样式以使用包装面板,但我在数据网格中看不到这样做的方法。
      【解决方案3】:

      也许您真正想要的控件是来自Toolkit 的 Accordian Control。

      查看手风琴行为示例here

      请注意,实际外观与任何其他控件一样具有样式。基本功能是对项目类别进行分组,否则这些项目将是一个简单的列表。

      【讨论】:

      • 谢谢,我去看看。我不确定这是否会支持来自域数据源的分组。我还需要超过 1 级的分组。
      • 嗯..我从你对斯蒂芬的评论中看到你的真实要求和问题有点暴露。尚不清楚“分组”的概念如何与“Wrappanel”样式布局兼容?我建议您明确地编辑您的问题状态,您真正想要实现的实际 UI。
      • @AnthonyWJones- 我添加了我正在尝试创建的图像。我一直在寻找一个控件来使用数据绑定来执行此操作,但看起来我只需要编写一些代码来手动创建 UI。
      【解决方案4】:

      【讨论】:

      • 谢谢,有机会我会看看这是否适合我的情况。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多