如何在ObservableCollection中保存这样的订单?

时间:2016-05-04 14:11:27

标签: c# wpf observablecollection

我刚收到一些这样的数据

[
    {
        "ID":2,
        "NOTAMRec":"C16-0001",
        "DeliverDate":"310827",
        "BeginDate":"1601010130",
        "ExpireDate":"1606070630",
        "Priority":"GG",
        "ItemA":"LOL",
        "OriginalNotamID":2,
        "SelectedNotamColor":null
    },
    {
        "ID":8,
        "NOTAMRec":"C16-0004",
        "DeliverDate":"230705",
        "BeginDate":"1602231505",
        "ExpireDate":"1606312359 EST",
        "Priority":"GG",
        "ItemA":"LOVEU",
        "OriginalNotamID":8,
        "SelectedNotamColor":null
    },
    {
        "ID":9,
        "NOTAMRec":"C16-0005",
        "DeliverDate":"240703",
        "BeginDate":"1602241502",
        "ExpireDate":"1606312359 EST",
        "Priority":"GG",
        "ItemA":"LOVEU",
        "OriginalNotamID":9,
        "SelectedNotamColor":null
    }
]

我将其转换为模型

Public Class MyModel 
{
  Public long ID{get;set;}
  public string NOTAMRec{get;set;}
  ......
  public string ItemA{get;set;}
}

并将其添加到ObservableCollection中。

问题 - 我想按此顺序对我的收藏品进行排序。无论我在此集合中添加了多少MyModel,ItemA等于“LOVEU”的模型将始终位于此列表的顶部,因此当我向用户显示此列表时,他们将始终在第一个中看到带有LOVEU的MyModel地点。

谢谢!

2 个答案:

答案 0 :(得分:0)

可能它不是最好的解决方案,但这应该有效

var query1 = MyCollection.Where(w => w.ItemA == "LOVEU");
var query2 = MyCollection.Where(w => w.ItemA != "LOVEU");
MyCollection = new ObservableCollection<MyModel>(query2);
foreach (var item in query1)
{
    MyCollection.Insert(0,item);
}

答案 1 :(得分:0)

我想这应该可以解决问题:

collection.OrderBy(x => x.ItemA == "LOVEU").ThenBy(x => x.ID);

在第二个OrderBy中,您当然可以放置任何其他排序条件。