Вопрос

Я создаю 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 дает гораздо больше гибкости и останавливает эти упражнения на визуальное дерево (которые взломаны и чувствуют себя грязными)

вот Хорошая статья о ViewModel и TreeView...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top