WPF保持TreeView列表排序

时间:2011-08-04 14:48:58

标签: wpf treeview

我在TreeView上有一个节点,我手动填充并希望保持排序。通过用户交互,TreeViewItem上的标题可能会发生变化,它们应该移动到列表中的适当位置。

我遍历一个foreach,创建了许多TreeViewItem并将它们添加到父节点。所有孩子都需要进行分类。然后我按如下方式添加SortDescription。

tviParent.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));

这会对初始列表进行排序,但是如果我在显示其中一个树视图项后更改其标题,则该项不会再次排序。标题文本更改,但列表中的项目位置保持不变。

我有什么遗失的吗?

我已经尝试清理列表并重新填充它,这将起作用,但是它会在我的程序中产生一些因素,因为我有很多逻辑用于更改所选项目以及列表中的一个树视图项目当我清除列表时会调用我正在清除的所有逻辑,然后当我在重建列表后以编程方式重新选择项目时再次调用它。

2 个答案:

答案 0 :(得分:12)

如果对其属性进行任何更改,则必须刷新项目集合

在标题编辑后尝试以下代码....

  tviParent.Items.Refresh();

如果上面的代码不起作用,请在每次编辑后尝试下面的代码...

  tviParent.Items.SortDescriptions.Clear()
  tviParent.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));  

答案 1 :(得分:1)

如果您设置

yourCollectionView.IsLiveSorting = true;

然后它将自动更新。

还可以将其投入到像这样的转换器中:https://stackoverflow.com/a/5730402/364429