2011-01-20 18 views
13

In WPF, CollectionViewSource consente l'ordinamento (OrdinaDescrizioni) e il raggruppamento (GroupDescriptions). Tuttavia, non riesco a trovare un modo per ordinare i gruppi. È possibile?Come ordinare i gruppi in WPF

risposta

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> 

Basta aggiungere due SortDescriptions.Adding due descrizioni di ordinamento ci permette di ordinare i gruppi e poi gli elementi all'interno dei gruppi.

Per ulteriori assegno qui

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

+0

Nonostante il fatto che non v'è alcuna bea.stollnitz.com dominio (più): Mentre 'GroupDescriptions' può contenere qualsiasi classe che deriva da' GroupDescription' - dover solo sovrascrivere il metodo 'GroupNameFromItem' che traduce qualsiasi oggetto di input su qualsiasi oggetto di output,' SortDescriptions' supporta solo STRUCT (!!!!!) 'SortDescription' che si occupa solo dei nomi di proprietà. Non c'è modo di correlare questi due mondi, una struttura e una classe astratta. – springy76

+0

questo non ha funzionato per me ... sto usando 'ICollectionView' nel codice dietro (non xaml) – JobaDiniz

4

L'ordinamento dei gruppi è possibile anche se non è così semplice. Lo spiegherò sull'esempio.

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

Se si desidera elementi del gruppo e ordinare i gruppi in ordine alfabetico poi ordinare gli elementi all'interno di ogni gruppo in ordine alfabetico allora si dovrebbe effettuare le seguenti operazioni:

  1. Aggiungi PropertyGroupDescription riferimento Group proprietà
  2. Aggiungi SortDescription riferimento Group
  3. Aggiungi ordinamento Descrizione riferimento Name

Il processo di raggruppamento sembra funzionare in modo efficace come il seguente: Iterate tramite già ordinati elementi di conseguenza. Quando incontri elementi di un gruppo sconosciuto - crea un gruppo e aggiungilo all'elenco dei gruppi. Quando incontri elementi di un gruppo esistente, aggiungili al gruppo esistente. (L'implementazione effettiva potrebbe essere diversa). Quindi se i tuoi elementi sono ordinati nell'ordine in cui desideri che i tuoi gruppi appaiano, ordinerai effettivamente i gruppi.