2011-11-07 103 views
1

我有以下XML:如何使用CollectionViewSource按日期對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。任何人都可以請賜教,我如何排序的日期,以滿足顯示要求?

非常感謝,我將不勝感激任何幫助。

回答

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())); 
    } 
} 
相關問題