Сохраняет ли ListBox CollectionViewSource для ItemsSource?

Я пишу элемент управления для изучения древовидной структуры, которая может быть создана динамически. Этот элемент управления очень похож на окно обозревателя, в котором "CurrentItem" является открытой папкой, а некоторые "ChildrenItems" являются подпапками или файлами.

Для отображения ChildrenItems я использую ListBox. Когда я нажимаю на дочерний элемент, я устанавливаю новый CurrentItem в качестве дочернего элемента и обновляю ChildrenItems (переходя вниз по дереву).

Технически, я часто модифицирую свойство ItemsSource объекта ListBox.

У меня также есть некоторые стандартные команды, такие как "Go Up", "Go Back", "Root" и т. Д.

У меня возникли некоторые проблемы с командой "Перейти вверх", и я заметил, что когда я изменяю свойство ItemsSource списка на набор ItemsSource, который я предварительно установил, SelectedItem объекта ListBox сбрасывается на старый элемент, выбранный при использовании старого ItemsSource,

Может быть, маленький пример будет более явным: допустим, у меня есть такая древовидная структура:

 - Root
   - Node 1
     - SubNode 1a
     - SubNode 1b
   - Node 2
   - Node 3

Я начинаю исследовать эту структуру с установки "CurrentItem" в качестве Root. Это означает, что мой ListBox ItemsSource установлен на "Node1, Node2, Node3".

Затем я нажимаю "Node1" (который изменяет SelectedItem). Мой элемент управления затем устанавливает свой "CurrentItem" в этот новый SelectedItem, а также устанавливает ListBox ItemsSource в "SubNode1a, SubNode1b".

После этого, если я использую свою команду "Перейти вверх", "Текущий элемент" сбрасывается в "Корень", а в качестве источника элементов ListBox - "Узел1, Узел2, Узел3", но есть разница: выбирается "Узел1".

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

Спасибо за ваши идеи.

1 ответ

Я нашел интересную статью от Bea Stollnitz, где она говорит:

CollectionViewSource также включает еще один интересный сценарий. Если определенный CollectionViewSource указывает на разные коллекции в разное время, он запоминает все представления, созданные им для упаковки этих коллекций. Если источник, который уже был установлен в прошлом, устанавливается снова, CVS распознает его и повторно использует представление, которое он создал первоначально. Это поведение полезно в сценариях иерархического связывания.

Это может быть ответ, который я искал. Мой следующий вопрос: можно ли отключить это поведение?

Другие вопросы по тегам