wpf вручную генерируют контейнер TreeViewItem

Я создаю TreeView во времени выполнения. Это имеет несколько узлов (TreeViewItem), каждый имеющий имя. Первоначально это сворачивается. Отдельное поле комбинированного списка отображает Названия всего TreeViewItem. Я должен выделить TreeViewItem на основе выбранного Имени. Я использую рекурсивную функцию и получаю контейнер TreeViewItem как это:

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

но это

родитель. ItemContainerGenerator. Состояние = GeneratorStatus. NotStarted

для всех свернутых объектов. Как я могу генерировать контейнеры для них вручную (Не разворачивая их)?

1
задан viky 22 April 2010 в 07:40
поделиться

1 ответ

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

Модель представления может увеличить функциональность дерева, не беспокоясь о тех проблемах, с которыми вы столкнулись.

Модель представления для вашего приложения будет иметь пару дополнительных свойств

IsSelected

IsExpanded

IsHighlighted

а также ваши

Data

затем вы привяжете (используя ItemContainerStyle) IsSelected, IsHighlighted и IsExpanded к TreeViewItem, затем, поскольку у вас есть коллекция этих моделей представления, вы можете выполнить поиск по модели представления и просто установить свойство IsHighlighted. Тогда модель представления откликнется и благодаря привязке к стилю выделит элемент TreeViewItem по вашему желанию. Она также может делать такие забавные вещи, как раскрытие всех узлов выше. Древовидное представление будет реагировать следующим образом.

Модель представления в сочетании с древовидным представлением дает гораздо больше гибкости и прекращает эти визуальные упражнения по ползанию по дереву (которые являются хаком, и чувствуют себя грязными)

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

2
ответ дан 3 September 2019 в 01:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: