2010-01-07 82 views

回答

5

解决方案您可以通过使用绑定到PagedCollectionView嵌套ItemsControls做到这一点。

说我有一个数据源 - MyItems - 与字段:Category,SectionOption。我可以从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")) 

然后,我结合我的第一ItemsControlPagedCollectionView

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

0

DataGrid控件支持分组。

蒂豪华有一个很好的博客与数据网格分组。 link text

+0

是的我知道,但datagrid是不是真的适合我想要的。我想为每行显示一个控件(例如按钮),但这些控件需要水平换行而不是垂直换行。所以在ItemsControl中,你可以使ItemsPanel的样式使用一个wrappanel,但是我不能在DataGrid中看到这样做的方法。 – 2010-01-07 16:20:48

0

也许你真正想要的控制是从Toolkit手风琴控制。

查看Accordian行为样本here

请注意,实际外观与任何其他控件的样式一样。其基本功能是对那些原本是简单列表的项目进行分组。

+0

谢谢,我来看看。我不确定这会支持domaindatasource的分组。另外我需要超过1个级别的分组。 – 2010-01-08 10:54:26

+0

嗯..我看到你的评论斯蒂芬你真正的要求和问题是有点透露。它不清楚“分组”的想法是如何与“Wrappanel”风格的布局兼容的?我建议你编辑你的问题状态明确什么真正的用户界面,你真的想达到目的。 – AnthonyWJones 2010-01-08 11:55:06

+0

@ AnthonyWJones-我添加了一个我正在尝试创建的图像。我正在寻找一个控件来做到这一点使用数据绑定,但它看起来像我只需要编写一些代码手动创建用户界面。 – 2010-01-08 14:37:17