按Xamarin形式的属性对对象的ObservableCollection进行排序

时间:2018-08-26 11:21:01

标签: c# xamarin xamarin.forms

我试图通过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;
        }
    }
}

2 个答案:

答案 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));