WPF хранит отсортированный список TreeView - PullRequest
7 голосов
/ 04 августа 2011

У меня есть узел TreeView, который я заполняю вручную и хочу сохранить сортировку. В результате взаимодействия с пользователем заголовки TreeViewItem могут измениться, и они должны переместиться в соответствующее место в списке.

Я перебираю foreach, создавая множество TreeViewItem и добавляя их в родительский узел. Это все дети, которые должны быть отсортированы. Затем я добавляю SortDescription следующим образом.

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

Это сортирует начальный список, но если я изменю заголовок для одного из элементов представления дерева после его отображения, элемент не сортируется снова. Текст заголовка изменяется, но положение элементов в списке остается прежним.

Что-то мне не хватает?

Я попытался очистить список и заново его заполнить, что сработает, однако это вызывает некоторые проблемы в моей программе, так как у меня много логики, когда выбранный элемент изменяется и так как один из элементов представления дерева в списке то, что я очищаюсь, выбрано, оно вызывает всю эту логику, когда я очищаю список, а затем снова, когда я программно повторно выбираю элемент после перестройки списка.

Ответы [ 2 ]

12 голосов
/ 04 августа 2011

Коллекция элементов должна быть обновлена ​​после любого изменения ее свойства

попробуйте следующий код после редактирования заголовка ....

  tviParent.Items.Refresh();

, если код выше не делаетработай, потом попробуй код ниже после каждого редактирования ...

  tviParent.Items.SortDescriptions.Clear()
  tviParent.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending));  
1 голос
/ 19 декабря 2018

Если вы установите

yourCollectionView.IsLiveSorting = true;

, тогда он обновится автоматически.

Также, чтобы заставить это работать рекурсивно, поместите это в конвертер как здесь: https://stackoverflow.com/a/5730402/364429

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...