我试图通过Xamarin Forms中的对象属性之一对可观察对象集合进行排序。
以下代码似乎应该起作用,但事实并非如此。我正在努力学习尽可能多的东西,所以我很感兴趣为什么不这样做。我确定可以将解决方案复制并粘贴到某个地方,但是我还没有找到解释原因的答案。
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.Internals;
namespace engME
{
public partial class YourFullNamesListPage : ContentPage
{
ObservableCollection<NameObject> _nameList {get; } = MainPage.NameList;
public YourFullNamesListPage()
{
InitializeComponent();
_nameList = _nameList.OrderByDescending(a => a.Name);
FullNamesList.ItemsSource= _nameList;
}
}
}
答案 0 :(得分:1)
首先,我认为您的财产不应该是
ObservableCollection<NameObject> _nameList {get; } = MainPage.NameList;
由于您以后必须对其进行更改,因此我建议您在属性中进行设置(因为您可能必须在其他一些类中使用它):
ObservableCollection<NameObject> _nameList {get; set; } = MainPage.NameList;
然后设置您的订单,您可以执行以下操作:
public YourFullNamesListPage()
{
InitializeComponent();
_nameList = new ObservableCollection<NameObject>(_nameList.OrderByDescending(x => x.Name));
FullNamesList.ItemsSource= _nameList;
}
以下类型为System.Linq.IOrderedEnumerable<T>
,因此您需要通过将其包装为一个将其转换为可观察的集合。
_nameList.OrderByDescending(x => x.Name)
然后您就可以出发了 如有查询,请还原。
答案 1 :(得分:0)
您的_nameList是getonly,因此以下分配根本不会更改它:
_nameList = ObservableCollection<NameObject>(MainPage.NameList.OrderByDescending(a => a.Name));