2010-01-07 47 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