使用自定义逻辑对ObservableCollection进行排序

时间:2012-05-16 12:08:18

标签: c# wpf sorting observablecollection

WPF以及ObservableCollection的新用户我需要以自己的方式对其进行排序,并在每次添加或删除时对其进行排序。

ObservableCollection<User> users = new ObservableCollection<User>();

用户对象如下:

class User
{
    public string Name { get; set; }
    public bool IsOp { get; set; }
    public bool IsAway { get; set; }
}

我希望列表顶部的所有IsOp's按字母顺序排列。然后按照字母顺序排列所有非操作。

实现这一目标的正确方法是什么?

非常感谢提前。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用CollectionView

ICollectionView view = CollectionViewSource.GetDefaultView(users);
view.SortDescriptions.Add(new SortDescription("IsOp", ListSortDirection.Descending));
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

当您将视图绑定到该列表时,项目将按指定的顺序显示。

使用显示here的技巧,您甚至可以使用Linq:

var query =
    from u in users.ShapeView()
    orderby u.IsOp descending, u.Name ascending
    select u;

query.Apply();