订购xamarin表格可观察的集合

时间:2019-01-16 11:17:35

标签: c# xaml xamarin xamarin.forms

在xamarin形式中,我有一个Oberservable的wordpress帖子集合。

我要按此集合中的特定值对该集合进行排序?

如何在Xamarin表单/ C#中做到这一点?

我可以看到有人在使用

list.OrderByDescending(x => DateTime.Parse(x)).ToList();

但这并不使用Observable集合或该集合中的特定值进行排序。

我的对象的填充是这样:

FlowObservableCollection<RootObject2> result = JsonConvert.DeserializeObject<FlowObservableCollection<RootObject2>>(await posts.Content.ReadAsStringAsync());

有人对我的数组排序有解决方案吗?

我要排序的值是一个子值,例如:mycollection.group.Myvalue

提前谢谢!

2 个答案:

答案 0 :(得分:3)

我对FlowObservableCollection<T>不熟悉,但是从我看来,它似乎是ObservableCollection<T> Microsoft Docs 的子类型。

由于ObservableCollection<T>本身是Collection<T>的子类型,因此实现了IEnumerable<T>,因此使用它的extension methods应该没有任何问题,例如OrderBy

  

我可以看到有人在使用

     

list.OrderByDescending(x => DateTime.Parse(x)).ToList();

     

我要排序的值是一个子值,例如:mycollection.group.Myvalue

您是否熟悉OrderByDescending()示例的lambda expressions中使用的LINQ query

如果不是,则list.OrderByDescending(x => DateTime.Parse(x)).ToList();中的术语x指的是列表中的元素,而您在=>箭头右侧指定的内容是订购的关键。 / p>

因此,如果您想按其他值排序,则可以简单地写类似myCollection.OrderByDescending(x => x.MyProperty);之类的符号,请注意,只要箭头两边的术语相同,就可以使用与x不同的术语,例如myCollection.OrderByDescending(myElement => myElement.MyProperty);

最后请注意,对myCollection.OrderByDescending()的调用会返回一个新的IEnumerable,其中包含在myCollection中找到的元素,并且不会更改myCollection本身。

您不能将IEnumerable<T>投射到FlowObservableCollection<T>。因此,如果需要有序的FlowObservableCollection<T>,则必须使用有序的IEnumerable作为输入实例化一个新的。

您的情况如下所示:

var orderedElements = myCollection.OrderByDescending(x => x.MyProperty); 
var orderedCollection = new FlowObservableCollection<RootObject2>(orderedElements);`

答案 1 :(得分:1)

您可以尝试以下方法:

   Collection = new ObservableCollection(Collection.OrderBy(x=>x.Date).ToList());

或采用此方法:

public static void Sort<T>(this ObservableCollection<T> collection, Comparison<T> comparison)
{
    var sortableList = new List<T>(collection);
    sortableList.Sort(comparison);

    for (int i = 0; i < sortableList.Count; i++)
    {
        collection.Move(collection.IndexOf(sortableList[i]), i);
    }
}