gpt4 book ai didi

c# - 绑定(bind)到 ListBox 中已排序的 ObservableCollection

转载 作者:太空狗 更新时间:2023-10-29 18:15:31 25 4
gpt4 key购买 nike

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

目前,我有一个 ListBox在 XAML 中,名称为 MyObjectsList以及构造函数中的以下代码将其链接起来:

public MyObjectListView()
{
InitializeComponent();
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects;
}

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

this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects
.OrderBy(x => x.Name)

但是当我这样做时,我没有看到 任何 对象反射(reflect)在 ListBox 中排序或其他方式。

当我将一个项目添加到我的 ObservableCollection 时,我该怎么做, 它显示为按 .Name 排序在ListBox

最佳答案

您的示例的问题是 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 Phone 7 的 Silverlight 是基于 Silverlight 3 的,并且不可用。我提到这一点只是为了让您了解它,因为它预期 WP7 最终会更新到 SL4。

关于c# - 绑定(bind)到 ListBox 中已排序的 ObservableCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com