如何对可观察的集合进行排序?

时间:2011-04-17 16:21:22

标签: c# wpf linq

我知道其他帖子与此类似,但没有一个人完全回答我的问题。

我正在处理的WPF应用程序中有多个不同的可观察集合,我需要对它们进行简单的字母排序,使它们按字母顺序显示。

使用Linq有一个简单的方法吗?如果没有,还有另一种简单的方法吗?

5 个答案:

答案 0 :(得分:2)

您可以提供自己的自定义排序逻辑,也可以使用CollectionView排序描述符属性对集合进行排序。首先看看这些链接,他们可能会有所帮助 - http://bea.stollnitz.com/blog/?p=17 http://www.wpftutorial.net/DataViews.html http://bea.stollnitz.com/blog/?p=24

答案 1 :(得分:1)

想到什么:

  1. 在View中排序,而不是在ViewModel中排序
  2. 拉出列表,排序列表,清除集合,插回
  3. 自定义SortedObservableCollection,但我不确定View会如何反应。
  4. 不确定您的具体需求。

答案 2 :(得分:0)

您可以使用已排序的可观察集合 - 它是一个集合,它始终按排序顺序维护项目(因此您只需插入项目,它就会插入集合中的正确位置)。

有几种实现方式 - 例如this onethis one

答案 3 :(得分:0)

看看这个http://mokosh.co.uk/post/2009/08/04/how-to-sort-observablecollection/

看起来干净简单的实施。

如果你只需要使用linq,你可以使用OrderBy扩展方法。有关orderby方法的更多信息是here

答案 4 :(得分:0)

您应该使用CollectionViewSource而不是ObservableCollection,或者您可以将您的集合包装在CollectionViewSource中。

public CollectionViewSource GetSortedView{
   get{
      CollectionViewSource view = new CollectionViewSource(myColl);
      view.SortDescriptors.Add(new SortDescriptor("propertyname"), Ascending);
      return view;
   }
}

好处是,如果将此视图绑定到datagrid等,它将显示列排序标志,并让用户进行进一步排序。