我如何使用CollectionViewSource按日期排序xml记录

本文关键字:排序 xml 记录 日期 何使用 CollectionViewSource | 更新日期: 2023-09-27 18:13:50

我有以下XML:

<Memories>
<Memory Title="blah blah" ID="1">
  <ImageFile>Data/Images/01.jpg</ImageFile>
  <Blurb>We did blah</Blurb>
  <Date>06/11/2009</Date>
</Memory>
<Memory Title="Graduation" ID="2">
  <ImageFile>Data/Images/02.jpg</ImageFile>
  <Blurb>We graduated!</Blurb>
  <Date>29/11/2007</Date>
</Memory>
<Memory Title="Ski time!" ID="3">
  <ImageFile>Data/Images/03.jpg</ImageFile>
  <Blurb>Ski!!!!!</Blurb>
  <Date>19/12/2008</Date>
</Memory>
//...etc
</Memories>

和下面的XAML:

    <CollectionViewSource x:Key="dataCvs" Source="{StaticResource data}" >
        <CollectionViewSource.SortDescriptions >
            <scm:SortDescription PropertyName="Date" />
        </CollectionViewSource.SortDescriptions>
        <CollectionViewSource.GroupDescriptions >
            <dat:PropertyGroupDescription PropertyName="@Name" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

我希望能够按日期排序,但在其当前形式中,日期不能按自然日期顺序排序;06/11/2009被分类为在19/12/2008之前,这是一个程序所期望的。将日期格式更改为yyyy/mm/dd会导致我出现问题,因为XML日期是作为我的表单的一部分显示的,它需要显示为dd/mm/yyyy。谁能告诉我,我该如何排序日期,以适应显示要求?

我如何使用CollectionViewSource按日期排序xml记录

我怀疑这可能只是使用纯XML而不是将它们转换为业务对象的主要缺点。原始字符串值只知道如何按字母数字排序。

如果你愿意用一些代码来解决这个问题,你可以使用ListCollectionView。CustomSort属性,带有自定义排序器,该排序器将字符串转换为合适的DateTime对象进行排序。

public class DateStringComparer : IComparer
{
    public int Compare(object x, object y)
    {
        return DateTime.Compare(DateTime.Parse(x.ToString()), DateTime.Parse(y.ToString()));
    }
}