首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定到ListBox中的排序ListBox

绑定到ListBox中的排序ListBox
EN

Stack Overflow用户
提问于 2010-08-24 02:49:59
回答 4查看 11.2K关注 0票数 8

我的Windows 7应用程序中有一个名为MyObjectList的数据对象列表,它继承了ObservableCollection<MyObject>。我将列表保存在App的一个公共属性MyObjects中。我的目标是将数据绑定到ListBox并按MyObject.Name进行排序。

目前,我在XAML中有一个名为ListBoxMyObjectsList,并在构造函数中使用以下代码将其链接起来:

代码语言:javascript
复制
public MyObjectListView()
{
    InitializeComponent();
    this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects;
}

这个很好用。我将项目添加到MyObjects中,它们将显示在ListBox中。但是,当数据出现在列表中时,不会按名称进行排序。我尝试了以下更改以获得要排序的数据:

代码语言:javascript
复制
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects
                                         .OrderBy(x => x.Name)

但是,当我这样做时,我没有看到ListBox排序或其他方面反映的任何对象。

当我将一个项目添加到我的ObservableCollection中时,它会按.NameListBox中显示出来。

EN

回答 4

Stack Overflow用户

发布于 2010-08-24 12:38:43

您的示例的问题是OrderBy方法返回IOrderedEnumerable类型的对象,而不是ObservableCollection。

这里有一些您可以做的事情,而不必像其他一些答案那样实现自定义集合。

代码语言:javascript
复制
var sortedMyObjects = new ObservableCollection<MyObject>();
foreach (var myobj in ((App)App.Current).MyObjects.Orderby(x => x.Name))
    sortedMyObjects.Add(myobj);
this.MyObjectsList.ItemsSource = sortedMyObjects;

其他答案都提出了可行的选择,但这将解决问题中的问题。

FWIW,在Silverlight 4中有一个PagedCollectionView,但是Windows 7的Silverlight是基于Silverlight 3的,这是不可用的。我之所以提到这一点,只是为了让您知道,WP7最终会更新为SL4。

票数 11
EN

Stack Overflow用户

发布于 2010-08-24 02:57:38

您可以使用一个已排序的集合而不是标准的ObservableCollection。有人在这里写了一个SortedObservableCollection

http://phillters.wordpress.com/2009/05/14/sortedobservablecollection/

票数 4
EN

Stack Overflow用户

发布于 2010-08-24 03:01:33

这对Silverlight没有帮助,但是对于WPF 3.5/4,有更好的方法来实现这一点,涉及到CollectionView

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3553237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档