C# 使用自定义逻辑对ObservableCollection进行排序
对于C# 使用自定义逻辑对ObservableCollection进行排序,c#,wpf,sorting,observablecollection,C#,Wpf,Sorting,Observablecollection,对于WPF和observeablecollection来说,我是新手,我需要以自己的方式对其进行排序,并在每次添加或删除内容时对其进行排序 ObservableCollection<User> users = new ObservableCollection<User>(); 我希望所有的IsOp的都按字母顺序排在列表的顶部。然后按字母顺序将所有非ops列在后面 实现这一目标的正确方法是什么 非常感谢。最简单的方法是使用收藏视图: ICollectionView vie
WPF
和observeablecollection
来说,我是新手,我需要以自己的方式对其进行排序,并在每次添加或删除内容时对其进行排序
ObservableCollection<User> users = new ObservableCollection<User>();
我希望所有的IsOp的都按字母顺序排在列表的顶部。然后按字母顺序将所有非ops列在后面
实现这一目标的正确方法是什么
非常感谢。最简单的方法是使用收藏视图
:
ICollectionView view = CollectionViewSource.GetDefaultView(users);
view.SortDescriptions.Add(new SortDescription("IsOp", ListSortDirection.Descending));
view.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
将视图绑定到该列表时,项目将按指定顺序显示
使用显示的技巧,您甚至可以使用Linq:
var query =
from u in users.ShapeView()
orderby u.IsOp descending, u.Name ascending
select u;
query.Apply();
看看连续LINQ。但是现在WPF中我的列表框不会自动更新,因为它不是observablecollection?是的,如果您将列表框的ItemsSource绑定到observablecollection(您不必绑定到query
;这只是使用LINQ指定排序顺序的一个技巧)Thomas,因此,如果我理解你的说法是对的,我只做了一次上面的事情,它将永久性地改变我的可观察集合的内部工作,因此不需要改变任何绑定,只要它改变,一切都会被排序?@Muhammad,是的,一旦你设置了collectionviewsource的排序描述,对基础集合的所有进一步更改将自动反映到view@MuhammadA,实际上它不会更改“可观察集合的内部工作”,但会更改集合的默认视图(用于绑定)的属性
var query =
from u in users.ShapeView()
orderby u.IsOp descending, u.Name ascending
select u;
query.Apply();