2010-09-05 62 views

回答

2

如果你使用Linq,你应该能够只是.OrderByDescending()?看看这里的一个例子 - http://msdn.microsoft.com/en-us/vcsharp/aa336756.aspx

如果这是针对您正在处理的上一个问题的得分列表,那么您应该能够按照得分数量排序,如果它以整数形式存储,而不必创建一个自定义比较器功能。一个例子LINQ查询订购您的名单将是这样的:

 var sortedItems = 
      from item in myObservableCollection 
      orderby item.Score descending 
      select item; 

一旦你有LINQ的的IEnumerable的结果,你可以重新创建一个ObservableCollection,并重新分配给您的视图模型(Cast LINQ result to ObservableCollection

+0

thx但我使用收集的字符串,它是5个最新输入的列表。最适合的是Queue,但它不能被序列化,我需要更新列表框(我可以“吞下”RemoveAt(0)因为它只有5个元素:))如果没有“template-reverse-iterator”,我会使用什么你的建议 – 2010-09-05 22:17:06

4

如果你已经有一个ObservableCollection,你不想改变我可能会去与CollectionViewSource类。您可以直接在XAML中执行此操作:

... 
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 
... 

<UserControl.Resources> 
    <CollectionViewSource x:Key="cvs" Source="{Binding}"> 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="TheProperty" Direction="Descending" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</UserControl.Resources> 

<ListBox ItemsSource={Binding Source={StaticResource cvs}}" />