我有以下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正在按照人们对计划的预期进行排序。将我的日期格式更改为yyyy / mm / dd会导致我出现问题,因为XML日期显示为表单的一部分,需要显示为dd / mm / yyyy。任何人都可以请教我如何根据显示要求对日期进行排序?
非常感谢,我将不胜感激。
答案 0 :(得分: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()));
}
}