【问题标题】:How do I use CollectionViewSource to sort xml records by date?如何使用 CollectionViewSource 按日期对 xml 记录进行排序?
【发布时间】:2011-11-07 19:41:36
【问题描述】:

我有以下 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>

我希望能够按日期排序,但在当前形式下,日期不会按自然日期顺序排序;正如人们对程序所期望的那样,2009 年 6 月 11 日被排序为 2008 年 12 月 19 日之前。将我的日期格式更改为 yyyy/mm/dd 会导致我出现问题,因为 XML 日期作为我的表单的一部分显示,并且需要显示为 dd/mm/yyyy。谁能告诉我如何对日期进行排序以符合显示要求?

非常感谢,我将不胜感激。

【问题讨论】:

    标签: c# wpf xml


    【解决方案1】:

    我怀疑这可能只是使用纯 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()));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多