2011-01-20 72 views
13

在WPF中,CollectionViewSource允許排序(SortDescriptions)和分組(GroupDescriptions)。但是,我找不到排序組的方式。可能嗎?如何訂購WPF中的組

回答

21
<CollectionViewSource x:Key="cvs" Source="{Binding Source={StaticResource animals}, Path=AnimalList}"> 
    <CollectionViewSource.GroupDescriptions> 
     <PropertyGroupDescription PropertyName="Category"/> 
    </CollectionViewSource.GroupDescriptions> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="Category" /> 
     <scm:SortDescription PropertyName="Name" /> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

只需添加兩個SortDescriptions.Adding兩種排序說明允許我們先對組進行排序,然後再對這些組進行排序。

詳細檢查這裏

http://bea.stollnitz.com/blog/?p=17

+0

儘管沒有域bea.stollnitz.com(再):雖然`GroupDescriptions`可以包含任何類從`GroupDescription`衍生 - 不必只覆蓋將任何輸入對象轉換爲任何輸出對象的方法`GroupNameFromItem`,`SortDescriptions`只支持僅針對屬性名稱的STRUCT(!!!!!)`SortDescription`。沒有辦法將這兩個世界,一個結構和一個抽象類相關聯。 – springy76 2016-04-29 09:05:24

4

羣組排序雖然不是那麼簡單,但是可以進行排序。我會在例子中解釋它。

class CollectionElement 
{ 
    public string Name {get; set; } 
    public string Group {get; set; } 
} 

如果你想族元素和組按字母順序排序,然後排序,每個組內的元素的字母順序,那麼你應該做到以下幾點:

  1. 添加PropertyGroupDescription引用Group財產
  2. 添加SortDescription引用Group
  3. Add SortDescription referencing Name

分組過程似乎有效地工作,如下所示:迭代通過已經排序因此。遇到元素表單未知組時 - 創建一個組並將其添加到組列表。遇到現有組中的元素時 - 將其添加到現有組中。 (實際實施可能不同)。因此,如果您的元素按您希望組出現的順序排序,您將有效地對這些組進行排序。