在我的程序中,我有TreeView节点,我需要能够上下移动,基本上改变顺序。我的TreeView是特定数据模型的ObservableCollection。每个节点都有一个名为"Rank“的属性,这是我想要对集合进行排序的值。话虽如此,我还是提到了这个问题。从这个问题上我发现了这个博客页。我正在尝试涉及sort函数的List的第二种方法。
这就是我要看的例子:
List<Person> list = new List<Person>(people);
list.Sort();请注意,每个节点的“等级”值都处于正常工作状态,并且正在正确变化。我只需要找到一种方法来重新排序基于该属性的集合,并在视图中反映它。
我的问题:在尝试实现上面的解决方案时,我得到了一个InvalidOperationException。我觉得我不知道如何告诉List根据等级进行排序。
我的代码是什么样子的:
List<TreeModel> sortedTree = new List<TreeModel>(TreeCollection);
sortedTree.Sort();我在这里错过了什么?如何根据秩属性对集合进行排序,并在视图中反映这些更改?
谢谢。
*我相信我以前可能曾就此事发表过意见,因此,如果由于某些原因,这个问题与我以前的问题太相似,我只会删除旧问题。
发布于 2013-12-05 20:51:53
Sort抛出InvalidOperationException,其组件类型没有默认比较:
默认比较器Comparer.Default找不到IComparable泛型接口或类型T的IComparable接口的实现。
但是,您可以将比较作为Sort提供
sortedTree.Sort((x, y) => x.Rank.CompareTo(y.Rank));要将排序的项传递回原始集合,可以清除/重新填充CurrentCollection,或者简单地为其分配一个新实例(如果执行后一个实例,请不要忘记给RaisePropertyChanged ):
CurrentCollection = new ObservableCollection<TreeModel>(sortedTree);发布于 2013-12-05 20:52:32
你需要传递你想要对你的列表进行排序的property name -
sortedTree = sortedTree.OrderBy(m => m.Rank).ToList();https://stackoverflow.com/questions/20410328
复制相似问题