如何使用CollectionViewSource对listview中的组进行排序?

时间:2015-07-30 07:03:01

标签: wpf xaml sorting collectionviewsource

<...>-11009 [007] 596251.750675: sys_ioctl <-system_call_fastpath    (1)
<...>-11009 [007] 596251.750675: fget_light <-sys_ioctl
<...>-11009 [007] 596251.750675: security_file_ioctl <-sys_ioctl
<...>-11009 [007] 596251.750676: cap_file_ioctl <-security_file_ioctl
<...>-11009 [007] 596251.750676: do_vfs_ioctl <-sys_ioctl
<...>-11009 [007] 596251.750676: sock_ioctl <-do_vfs_ioctl           (2)
<...>-11009 [007] 596251.750677: sock_do_ioctl <-sock_ioctl          (3)
<...>-11009 [007] 596251.750677: inet_ioctl <-sock_do_ioctl          (4)
<...>-11009 [007] 596251.750677: udp_ioctl <-inet_ioctl
<...>-11009 [007] 596251.750678: dev_ioctl <-sock_do_ioctl           (5)
<...>-11009 [007] 596251.750678: _cond_resched <-dev_ioctl
<...>-11009 [007] 596251.750679: dev_load <-dev_ioctl
<...>-11009 [007] 596251.750680: rtnl_lock <-dev_ioctl
<...>-11009 [007] 596251.750680: dev_ethtool <-dev_ioctl             (6)
<...>-11009 [007] 596251.750684: rtnl_unlock <-dev_ioctl
<...>-11009 [007] 596251.750685: _cond_resched <-dev_ioctl

上面的代码按字母顺序排列。但是我希望按照来自groupitems的日期对组进行排序。

例如,我有3个小组。

<CollectionViewSource x:Key="messages" Source="{Binding src}"> 
    <CollectionViewSource.GroupDescriptions> 
        <PropertyGroupDescription PropertyName="Group"/> 
    </CollectionViewSource.GroupDescriptions> 
    <CollectionViewSource.SortDescriptions>
        <SortDescription PropertyName="Group" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource> 

我希望......的结果是这样的。

Group A
- Invoice("cd", 06-24-2015)
- Invoice("car", 06-01-2015)

Group B
- Invoice("cd", 04-21-2015)
- Invoice("car", 06-17-2015)

Group C
- Invoice("cd", 07-02-2015)
- Invoice("car", 06-08-2015)

组顺序是C组 - &gt; A组 - &gt; B组 因为每个groupitems的最近日期是结果的比较目标。

C组的最近日期是07-02-2015。 A组的最近日期是06-24-2015。 B组最近的日期是06-17-2015。

所以结果是C - &gt; A - &gt;乙

如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

.Net 4.6.2添加了GroupDescription.SortDescriptionsGroupDescription.CustomSorthere的工作方式与CollectionViewSource.SortDescriptions相同,后者允许您提供IComparer对象。

答案 1 :(得分:0)

这应该有效:

<CollectionViewSource x:Key="messages" Source="{Binding src}"> 
    <CollectionViewSource.GroupDescriptions> 
        <PropertyGroupDescription PropertyName="Group"/> 
    </CollectionViewSource.GroupDescriptions> 
    <CollectionViewSource.SortDescriptions>
        <SortDescription PropertyName="Date" Direction="Descending" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>