如何按字母顺序对可观察集合进行排序

本文关键字:集合 排序 观察 何按字 顺序 | 更新日期: 2023-09-27 18:06:25

我需要按字母顺序对 populatior 之后的ObservableCollection进行排序,假设我在里面有这个模型:

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

这是我的ObservableCollection

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

假设里面有三个项目具有此顺序:

  1. 英国
  2. 阿富汗
  3. 意大利

我需要按字母顺序排序,所以我尝试:

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

但我没有得到任何效果,当它应该是:

  1. 阿富汗
  2. 英国
  3. 意大利

我做错了什么?

如何按字母顺序对可观察集合进行排序

ObservableCollection绑定到CollectionViewsource,添加排序 在其上,然后将该CollectionViewSource ItemSource用作 控制。

使用集合视图源进行排序

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

示例用法

<ListView ItemsSource="{Binding Source={StaticResource src}}" >
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只需按照此处所述将其传递给构造函数。