Ben*_*ack 8 .net c# silverlight observablecollection windows-phone-7
我在我的Windows Phone 7应用程序中有一个数据对象列表MyObjectList
,它继承了ObservableCollection<MyObject>
.我将列表保存在App
被调用的公共属性中MyObjects
.我的目标是将数据绑定到a ListBox
并按其排序MyObject.Name
.
目前,我ListBox
在XAML中使用了名称MyObjectsList
和构造函数中的以下代码来链接它:
public MyObjectListView()
{
InitializeComponent();
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects;
}
Run Code Online (Sandbox Code Playgroud)
这非常有效.我添加项目MyObjects
,他们出现在ListBox
.但是,数据在列表中显示时不按名称排序.我尝试了以下更改以获取要排序的数据:
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects
.OrderBy(x => x.Name)
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我看不到任何反映在ListBox
排序或其他方面的对象.
我可以这样做,当我向我添加一个项目时ObservableCollection
,它会显示.Name
在ListBox
?中排序?
Mat*_*sto 11
您的示例的问题是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;
Run Code Online (Sandbox Code Playgroud)
其他答案都提出了可行的替代方案,但这将解决问题中的问题.
FWIW,在Silverlight 4中有一个PagedCollectionView,但Windows Phone 7的Silverlight基于Silverlight 3并且不可用.我只是提到这一点,让你意识到WP7最终更新到SL4.
看看http://mokosh.co.uk/post/2009/08/04/how-to-sort-observablecollection/。
它解释了如何扩展 ObservableCollection 以公开基础 Items.Sort() 方法,然后通知侦听器集合已更改。
另外,这里的这篇文章..可能会对您有所帮助。它使用 CollectionView。