我的Windows 7应用程序中有一个名为MyObjectList的数据对象列表,它继承了ObservableCollection<MyObject>。我将列表保存在App的一个公共属性MyObjects中。我的目标是将数据绑定到ListBox并按MyObject.Name进行排序。
目前,我在XAML中有一个名为ListBox的MyObjectsList,并在构造函数中使用以下代码将其链接起来:
public MyObjectListView()
{
InitializeComponent();
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects;
}这个很好用。我将项目添加到MyObjects中,它们将显示在ListBox中。但是,当数据出现在列表中时,不会按名称进行排序。我尝试了以下更改以获得要排序的数据:
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects
.OrderBy(x => x.Name)但是,当我这样做时,我没有看到ListBox排序或其他方面反映的任何对象。
当我将一个项目添加到我的ObservableCollection中时,它会按.Name在ListBox中显示出来。
发布于 2010-08-24 12:38:43
您的示例的问题是OrderBy方法返回IOrderedEnumerable类型的对象,而不是ObservableCollection。
这里有一些您可以做的事情,而不必像其他一些答案那样实现自定义集合。
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。
发布于 2010-08-24 02:57:38
您可以使用一个已排序的集合而不是标准的ObservableCollection。有人在这里写了一个SortedObservableCollection:
http://phillters.wordpress.com/2009/05/14/sortedobservablecollection/
发布于 2010-08-24 03:01:33
这对Silverlight没有帮助,但是对于WPF 3.5/4,有更好的方法来实现这一点,涉及到CollectionView
https://stackoverflow.com/questions/3553237
复制相似问题