Сохраняет ли 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 распознает его и повторно использует представление, которое он создал первоначально. Это поведение полезно в сценариях иерархического связывания.
Это может быть ответ, который я искал. Мой следующий вопрос: можно ли отключить это поведение?