如何按字母顺序对ObservableCollection进行排序?

时间:2016-09-09 13:32:25

标签: c# sorting

我需要按照字母顺序对人口进行ObservableCollection排序,假设我在这个模型中:

class Nation
{
    public string Name { get; set; }
}

这是我的ObservableCollection

ObservableCollection<Nation> ob = new ObservableCollection<Nation>();

假设我内部有三个具有此顺序的项目:

  1. 英国
  2. 阿富汗
  3. 意大利
  4. 我需要按字母顺序排序,所以我试着:

    ob.OrderBy(c => c.Name);
    

    但是我没有效果,应该是:

    1. 阿富汗
    2. 英国
    3. 意大利
    4. 我做错了什么?

2 个答案:

答案 0 :(得分:1)

  

ObservableCollection绑定到CollectionViewsource,添加排序   在其上,然后使用CollectionViewSource作为a的ItemSource   控制。

使用CollectionViewSource进行排序

<CollectionViewSource x:Key='src' Source="{Binding ob}">
        <CollectionViewSource.SortDescriptions>
            <componentModel:SortDescription PropertyName="Name" />
        </CollectionViewSource.SortDescriptions>
 </CollectionViewSource>

样本用法

<ListView ItemsSource="{Binding Source={StaticResource src}}" >

答案 1 :(得分:0)

var ob = new ObservableCollection<Nation>
{
    new Nation {Name = "Sweden"},
    new Nation {Name = "Afghanistan"},
    new Nation {Name = "England"},
    new Nation {Name = "Albania"},
};

var sorted = ob.OrderBy(n => n.Name);

sortedIEnumerable并已排序,如果您仍然需要ObservableCollection,只需将其传递给构造函数here