W trybie WPF, CollectionViewSource pozwala na sortowanie (SortDescriptions) i grupowanie (GroupDescriptions). Nie mogę jednak znaleźć sposobu na zamówienie grup. Czy to możliwe?Jak mogę zamówić Grupy w WPF
Odpowiedz
<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>
Wystarczy dodać dwa SortDescriptions.Adding dwa opisy sortowania pozwala nam uporządkować grupy, a następnie elementy w obrębie grup.
Dalsze sprawdzanie
Sortowanie według grup jest możliwe, chociaż nie jest to takie proste. Wyjaśnię to na przykładzie.
class CollectionElement
{
public string Name {get; set; }
public string Group {get; set; }
}
Jeśli chcesz pierwiastków grup i sortowania grup alfabetycznie następnie posortować elementy w obrębie każdej grupy alfabetycznie wówczas należy wykonać następujące czynności:
- Dodaj PropertyGroupDescription przedstawieniu
Group
własność - Dodaj SortDescription przedstawieniu
Group
- Dodaj odniesienie do opisu sortowania
Name
Proces grupowania wydaje się działać tak samo skutecznie, jak następuje: Iteracja poprzez posortowane w ten sposób elementy. Po napotkaniu elementu z nieznanej grupy - utwórz grupę i dodaj ją do listy grup. Gdy napotykasz element z istniejącej grupy - dodaj go do istniejącej grupy. (Rzeczywiste wdrożenie może być inne). Więc jeśli twoje elementy są posortowane w kolejności, w jakiej chcesz, aby twoje grupy się pojawiły, skutecznie posortujesz grupy.
pomimo faktu, że nie ma bea.stollnitz.com domeny (już): Podczas 'GroupDescriptions' może zawierać dowolną klasę wynikającą z' GroupDescription' - konieczności tylko przesłonić metodę 'GroupNameFromItem', która tłumaczy dowolny obiekt wejściowy na dowolny obiekt wyjściowy,' SortDescriptions' obsługuje tylko atrybut SortUescription (!!!!!) ', który atakuje tylko nazwy właściwości. Nie ma sposobu, aby powiązać te 2 światy, klasę i klasę abstrakcyjną. – springy76
to nie działa dla mnie ... Używam 'ICollectionView' w kodzie za (nie xaml) – JobaDiniz