[英]InvalidOperationException while sorting an ObservableCollection
在我的程序中,我具有TreeView
节点,需要能够上下移动,基本上可以更改顺序。 我的TreeView
是特定数据模型的ObservableCollection
。 每个节点都有一个名为“ Rank”的属性,这是我想对集合进行排序的值。 话虽如此,我提到了这个问题 。 通过这个问题,我发现了这个博客页面 。 我正在尝试涉及List
的sort
函数的第二种方法。
这是我正在查看的示例:
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接口的实现。
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.