Сортировка групп по группам ItemCount - PullRequest
2 голосов
/ 02 января 2012

На ListCollectionView я просто добавляю новый GroupDescriptions. Но я ищу способ отсортировать их по группам ItemCount.

Итак, на первой позиции я бы получил группу с наибольшим количеством предметов.

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Вы можете заключить группы в другое представление и отсортировать их.

Пример XAML:

<CollectionViewSource x:Key="Items2" Source="{Binding Groups,
                                                      Source={StaticResource Items}}">
    <CollectionViewSource.SortDescriptions>
        <cm:SortDescription PropertyName="ItemCount" Direction="Descending"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>
0 голосов
/ 30 октября 2013

Я создал собственный ListCollectionView, чтобы сделать возможной сортировку группы верхнего уровня, используя великолепную библиотеку System.Linq.Dynamic :

Public Class ListCollectionViewEx
    Inherits ListCollectionView
    Private _groupSortDescriptions As SortDescriptionCollection
    Private _groups As ReadOnlyObservableCollection(Of Object)

    Public Overridable ReadOnly Property GroupSortDescriptions As SortDescriptionCollection
        Get
            Return Me._groupSortDescriptions
        End Get
    End Property

    Public Overrides ReadOnly Property Groups As System.Collections.ObjectModel.ReadOnlyObservableCollection(Of Object)
        Get
            If Me._groupSortDescriptions.Count > 0 Then
                If Me._groups Is Nothing AndAlso
                    MyBase.Groups IsNot Nothing Then
                    Dim qs As String = String.Join(
                        ",",
                        Me._groupSortDescriptions.
                        Select(Function(gsd) String.Format("{0} {1}", gsd.PropertyName, If(gsd.Direction = ListSortDirection.Ascending, "ASC", "DESC"))).
                        ToArray)

                    Dim sortedGroups = MyBase.Groups.
                        Select(Function(g) DirectCast(g, CollectionViewGroup)).
                        AsQueryable.OrderBy(qs).
                        AsEnumerable

                    If sortedGroups IsNot Nothing AndAlso
                        sortedGroups.Count > 0 Then
                        Me._groups = New ReadOnlyObservableCollection(Of Object)(New ObservableCollection(Of Object)(sortedGroups))
                    End If
                End If

                Return Me._groups
            End If

            Return MyBase.Groups
        End Get
    End Property

    Public Sub New(collection As IEnumerable)
        MyBase.New(collection)
        Me._groupSortDescriptions = New SortDescriptionCollection()
    End Sub
End Class

Использование:

View.GroupSortDescriptions.Add(New SortDescription("ItemCount", ListSortDirection.Descending))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...