WPF вручную генерировать контейнер TreeViewItem
-
30-09-2019 - |
Вопрос
Я создаю TreeView во время выполнения. У него есть несколько узлов (TreeViewItem), каждый из которых имеет имя. Первоначально он рухнул. Отдельные Combobox отображает имена всех TreeViewItem. Я должен выделить TreeviewItem на основе выбранного имени. Я использую рекурсивную функцию и получает контейнер TreeViewItem, как это:
if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
continue;
TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
но это
Parent.itemcontainerGenerator.Status = GeneratorStatus.noTStarted
Для всех рухнутых предметов. Как я могу генерировать контейнеры для них вручную (не расширяя их)?
Решение
В любое время вы оказываетесь на визуальном дереве, вы должны серьезно подумать о создании модели зрения.
Модель View может увеличить функциональные возможности TreeViews, не беспокоясь о видах выставленных вами проблем.
Модель представления для вашего приложения будет иметь пару дополнительных свойств
IsSelected
IsExpanded
IsHighlighted
а также ваш
Data
Тогда вы будете связываться (используя ItemContainerStyle) Isselected, Ishighlighted и Isexpanded TreeViewItem, то, как у вас была коллекция этих моделей просмотра, вы можете сделать свой поиск по модели View и просто установите свойство ISHIGHLOICH. Модель View затем ответила бы и из-за привязки к стилю выделить бы дерево, если вы хотите. Это также может сделать фанк вещи, такие как расширение всех узлов выше. Вид дерева ответит на это.
Модель вида в сочетании с TreeView дает гораздо больше гибкости и останавливает эти упражнения на визуальное дерево (которые взломаны и чувствуют себя грязными)