在我的程序中,我有TreeView
个节点,我需要能够上下移动,基本上改变顺序。我的TreeView
是特定数据模型的ObservableCollection
。每个节点都有一个名为“Rank”的属性,这是我想要对其进行排序的值。话虽如此,我提到this question。从那个问题我发现了blog page。我正在尝试涉及sort
的{{1}}函数的第二种方法。
这是我正在看的例子:
List
请注意,每个节点的“Rank”值处于正常工作状态并正确更改。我只需要找到一种基于该属性重新排序集合的方法,并将其反映在View中。
我的问题:在尝试实施上述解决方案时,我得到List<Person> list = new List<Person>(people);
list.Sort();
。我觉得我不明白如何告诉InvalidOperationException
根据排名进行排序。
我的代码是什么样的:
List
我在这里缺少什么?如何根据rank属性对集合进行排序并在视图中反映这些更改?
谢谢。
*我相信我之前可能已经发布了这个,所以如果由于某种原因这个问题与我的旧问题太相似,我只会删除旧问题。
答案 0 :(得分:2)
Sort
抛出InvalidOperationException
其组件类型没有默认比较:
默认比较器Comparer.Default找不到IComparable通用接口的实现或类型T的IComparable接口。
但您可以将比较作为first parameter to Sort
:
sortedTree.Sort((x, y) => x.Rank.CompareTo(y.Rank));
要将已排序的项目传回原始集合,您可以清除/重新填充CurrentCollection
,或者只是为其分配一个新实例(如果您执行后者,请不要忘记RaisePropertyChanged
) :
CurrentCollection = new ObservableCollection<TreeModel>(sortedTree);
答案 1 :(得分:1)
您需要通过property name
对列表进行排序,如下所示 -
sortedTree = sortedTree.OrderBy(m => m.Rank).ToList();