繁体   English   中英

对ObservableCollection排序时发生InvalidOperationException

[英]InvalidOperationException while sorting an ObservableCollection

在我的程序中,我具有TreeView节点,需要能够上下移动,基本上可以更改顺序。 我的TreeView是特定数据模型的ObservableCollection 每个节点都有一个名为“ Rank”的属性,这是我想对集合进行排序的值。 话虽如此,我提到了这个问题 通过这个问题,我发现了这个博客页面 我正在尝试涉及Listsort函数的第二种方法。

这是我正在查看的示例:

List<Person> list = new List<Person>(people);
list.Sort();

请注意,每个节点的“等级”值处于正常工作状态,并且正确更改。 我只需要找到一种基于该属性重新排序集合并将其反映在View中的方法。

我的问题:尝试实现上述解决方案时,我收到了InvalidOperationException 我觉得我不明白如何告诉List根据等级进行排序。

我的代码如下所示:

List<TreeModel> sortedTree = new List<TreeModel>(TreeCollection);
sortedTree.Sort();

我在这里想念什么? 如何根据rank属性对集合进行排序,并在视图中反映这些更改?

谢谢。

*我相信我之前可能已经发布过有关此问题的信息,因此,如果由于某种原因该问题与我的旧问题过于相似,我将删除旧问题。

Sort引发InvalidOperationException其组件类型没有默认比较:

默认的比较器Comparer.Default找不到类型T的IComparable通用接口或IComparable接口的实现。

但是,您可以提供比较作为Sort第一个参数

sortedTree.Sort((x, y) => x.Rank.CompareTo(y.Rank));

要将排序后的项目传递回原始集合,您可以清除/重新填充CurrentCollection ,或者简单地为其分配一个新实例(如果选择后者,请不要忘记使用RaisePropertyChanged ):

CurrentCollection = new ObservableCollection<TreeModel>(sortedTree);

您需要传递要对列表进行排序的property name ,如下所示:

sortedTree = sortedTree.OrderBy(m => m.Rank).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM