![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| shtuceron |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 17.2.2008 Репутация: нет Всего: нет |
Добрый день.
Никак не могу понять как происходит создание и заполнение иерархической структуры списка TreeView. Знаю, что для этого необходимо использовать элемент HierarchicalDataTemplate. Составил тестовый пример и пытаюсь добиться его работоспособности...
и код инициализации коллекций:
Результат получается: +Node1 +Node2 Мне нужно: +Node1 SubNode1 SubNode2 +Node2 SubNode1 SubNode2 Спасибо. Это сообщение отредактировал(а) shtuceron - 5.7.2013, 15:00 |
||||||||
|
|||||||||
| dzaraev |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Вообще, поведение данных классов подробно расписано в MSDN: TreeView, HierarchicalDataTemplate
Попробую объяснить "на пальцах": Свойство HierarchicalDataTemplate.DataType - это тип элемента, который TreeView хочет отобразить, например тип Node. Свойство HierarchicalDataTemplate.ItemsSource - это множество дочерних элементов отображаемого типа, например свойство Node.SubNodes Т.е. если мы в данной позиции отображаем элемент типа Node и затем разворачиваем его, то для получения дочерних элементов будет использовано его свойство Node.SubNodes. Далее, если в коллекции Node.SubNodes лежали элементы - тоже типа Node, то к ним применяется тот же самый HierarchicalDataTemplate. Т.е. если у вас в дереве все элементы одного типа, то достаточно одного HierarchicalDataTemplate. Если же в дереве встречается ( в любой коллекции, под-коллекции - не важно) элемент другого типа, скажем ExclusiveNode, то для его отображения нужен другой HierarchicalDataTemplate, такой, у которого DataType будет указывать на ExclusiveNode. И если дочерние элементы типа ExclusiveNode хранятся в его свойстве ExclusiveNode.SubExNodes, то у второго HierarchicalDataTemplate свойство ItemsSource будет уже указывать на свойство SubExNodes. Если вам не нужно у какого-то типа элемента в дереве брать дочерние элементы, можно добавить простой DataTemplate для такого типа. Еще, у вас в дочерних элементах в желаемом результате представлены разные типы элементов, таким образом, чтобы засунуть их в одну коллекцию, они должны быть совместимыми с типом элементов коллекции. В вашем случае можно использовать коллекцию элементов типа Object. Короче, вот решение для вашей задачи (я предположил по вашему посту, что у типа SubNode не должно быть дочерних элементов): Классы узлов:
Код XAML:
Инициализация:
Результат: прикреплённая картинка. Это сообщение отредактировал(а) dzaraev - 5.7.2013, 19:33 Присоединённый файл ( Кол-во скачиваний: 6 )
result.png 12,20 Kb--------------------
Если вопрос решён - помечайте тему. |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |