我知道还有其他类似的帖子,但是没有一个完全回答了我的问题。
我在WPF应用程序中有多个不同的可观察集合,我正在工作,我需要对它们进行简单的字母排序,以使它们按字母顺序显示。
是否有一个简单的方法来做到这一点与Linq?如果没有,有没有其他简单的方法?
您可以提供自己的自定义排序逻辑,也可以使用CollectionView排序描述符属性对您的集合进行排序。首先看看这些链接,它们可能会有所帮助http://bea.stollnitz.com/blog/?p=17http://www.wpftutorial.net/DataViews.htmlhttp://bea.stollnitz.com/blog/?p=24
想到什么:
- 在View中排序,而不是在ViewModel中排序
- 拉入列表,排序列表,清除集合,插入回
- 自定义sortedoobservablecollection,但我不确定视图如何对此作出反应。
不确定你的具体需求
你可以使用排序的可观察对象集合——它是一个集合,它在任何时候都以排序的顺序维护项目(所以你只要插入项目,它就会被插入到集合的正确位置)。
有几个实现,像这个或这个。
你应该使用CollectionViewSource而不是ObservableCollection,或者你可以在CollectionViewSource中包装你的集合。
public CollectionViewSource GetSortedView{
get{
CollectionViewSource view = new CollectionViewSource(myColl);
view.SortDescriptors.Add(new SortDescriptor("propertyname"), Ascending);
return view;
}
}
的好处是,如果你将这个视图绑定到datagrid等,它将显示列排序标志,也让用户做进一步的排序。
看看这个http://mokosh.co.uk/post/2009/08/04/how-to-sort-observablecollection/
看起来是一个干净和容易的实现。
如果您只需要使用linq,则可以使用OrderBy扩展方法。关于orderby方法的更多信息在这里