【问题标题】:Ordering xamarin forms observable collection订购 xamarin 形成可观察的集合
【发布时间】:2019-06-10 11:17:42
【问题描述】:

在 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

提前致谢!

【问题讨论】:

  • 如果你能告诉我你想根据什么对这个集合进行排序会有所帮助

标签: c# xaml xamarin xamarin.forms


【解决方案1】:

我不熟悉FlowObservableCollection&lt;T&gt;,但据我所知,它似乎是ObservableCollection&lt;T&gt;的子类型Microsoft Docs

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

我可以看到某处有人在使用:

list.OrderByDescending(x =&gt; DateTime.Parse(x)).ToList();

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

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

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

因此,如果您想按不同的值进行排序,您可以简单地编写类似 myCollection.OrderByDescending(x =&gt; x.MyProperty); 的内容。请注意,您可以使用与 x 不同的术语,只要它们在箭头两侧相同即可,例如myCollection.OrderByDescending(myElement =&gt; myElement.MyProperty);

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

您不能将IEnumerable&lt;T&gt; 转换为FlowObservableCollection&lt;T&gt;。因此,如果您需要一个已订购的 FlowObservableCollection&lt;T&gt;,您必须使用订购的 IEnumerable 作为输入来实例化一个新的。

你的情况可能是这样的:

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

【讨论】:

  • 您好,感谢您的回答,我正在尝试这样做FlowObservableCollection&lt;RootObject2&gt; test = (FlowObservableCollection&lt;RootObject2&gt;)result.OrderByDescending(x =&gt; x.acf.product_date_group.product_date);,但它说“指定的演员表不可用”
【解决方案2】:

你可以试试这个:

   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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多