Как я могу заказать группы в WPF - PullRequest
14 голосов
/ 20 января 2011

В WPF CollectionViewSource позволяет сортировать (SortDescription) и группировать (GroupDescription).Тем не менее, я не могу найти способ заказать группы.Возможно ли это?

Ответы [ 2 ]

21 голосов
/ 20 января 2011
<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>

Просто добавьте два описания SortDescription. Добавление двух описаний сортировки позволяет сначала отсортировать группы, а затем элементы в группах.

Подробнее см. Здесь

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

5 голосов
/ 20 января 2011

Сортировка групп возможна, хотя это не так просто.Я объясню это на примере.

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

Если вы хотите сгруппировать элементы и отсортировать группы по алфавиту, то отсортировать элементы внутри каждой группы по алфавиту, тогда вы должны сделать следующее:

  1. Добавить PropertyGroupDescription ссылка Group свойство
  2. Добавить SortDescription ссылка Group
  3. Добавить ссылку SortDescription Name

Процесс группировки, по-видимому, эффективно работает следующим образом: последовательно переберите уже отсортированных элементов.При обнаружении элемента формируют неизвестную группу - создайте группу и добавьте ее в список групп.При обнаружении элемента из существующей группы - добавьте его в существующую группу.(Фактическая реализация может быть разной).Поэтому, если ваши элементы отсортированы в том порядке, в котором вы хотите, чтобы группы появлялись, вы эффективно сортируете группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...