powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамическое заполнение TreeView из XML
8 сообщений из 8, страница 1 из 1
Динамическое заполнение TreeView из XML
    #36943555
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Имеются XML-данные, нужно отобразить их в TreeView. Привязку не использую.

Подаю данные:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
XElement root =
    new XElement("Contacts",
        new XElement("Contact",
            new XElement("Name", "Patrick Hines"),
            new XElement("Phone", "206-555-0144"),
            new XElement("Address",
                new XElement("Street1", "123 Main St"),
                new XElement("City", "Mercer Island"),
                new XElement("State", "WA"),
                new XElement("Postal", "68042")
            )
        )
    );
Добавляю первый узел, начинаю рекурсию:
Код: plaintext
1.
treeView1.Items.Add(root.Name.LocalName);
FillChilds(root);
Рекурсия:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private void FillChilds(XElement parent)
{
    foreach (var obj in parent.Elements())
    {
        treeView1.Items.Add(obj.Name.LocalName);
        FillChilds(obj);
    }
}
В результате успешно прохожу по данным, но не строю иерархию данных внутри контрола и получаю обычный список.

Чтобы решить эту проблему, нужно в рекурсивную функцию также подавать и текущий узел, в который в этой функции будут добавляться потомки.

Получить нужный TreeViewItem не получается.
Пробовал:
Код: plaintext
TreeViewItem tvi = treeView1.Items.Last(); //сразу после добавления узла
Код: plaintext
1.
int index = treeView1.Items.IndexOf(root.Name.LocalName);
TreeViewItem tvi = (TreeViewItem)treeView1.Items[index];
Получаю - не могу преобразовать строку в TreeViewItem.

Извиняюсь за сумбурное изложение, но собственно как получить требуемый TreeViewItem из TreeView, чтобы затем использовать его свойство Items для заполнения потомков данного узла?
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943564
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic
Имеются XML-данные, нужно отобразить их в TreeView. Привязку не использую.Ну и зря, не пришлось бы извращаться. Вот на эту тему статья .
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943570
enigmatic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositumenigmatic
Имеются XML-данные, нужно отобразить их в TreeView. Привязку не использую.Ну и зря, не пришлось бы извращаться. Вот на эту тему статья .
Да, забыл написать, что нашел в поиске ваш вопрос и вашу статью, и чувствую придется использовать привязку.
Но с другой стороны, хотелось бы решить эту проблему напрямую.
Если сделать то же самое, используя WinForms.TreeView, эта проблема не возникает.
А в данном случае даже не понятно с какого края подступиться. Хотя оно со своей стороны тоже право.
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943603
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
enigmatic
Да, забыл написать, что нашел в поиске ваш вопрос и вашу статью, и чувствую придется использовать привязку.
Но с другой стороны, хотелось бы решить эту проблему напрямую.
Если сделать то же самое, используя WinForms.TreeView, эта проблема не возникает.
А в данном случае даже не понятно с какого края подступиться. Хотя оно со своей стороны тоже право.
Если приспичило именно программно, то на скорую руку можно сделать так .
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943612
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуй не буду у себя держать такие исходники (захламлять файловое хранилище).

Опубликовываю фрагмент кода здесь, а по линку исходники удалю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
        public MainWindow() {
            InitializeComponent();

            XElement root = new XElement("Contacts",
                new XElement("Contact",
                    new XElement("Name", "Patrick Hines"),
                    new XElement("Phone", "206-555-0144"),
                    new XElement("Address",
                        new XElement("Street1", "123 Main St"),
                        new XElement("City", "Mercer Island"),
                        new XElement("State", "WA"),
                        new XElement("Postal", "68042"))));
            TreeViewItem item = new TreeViewItem() {
                Header = string.Format("{0} {1}", root.Name.LocalName.Trim(), root.Elements().Count() > 0 ? "" : ": " + root.Value.Trim()), Tag = root
            };
            tree.Items.Add(item);
            FillItem(item);
        }

        void FillItem(TreeViewItem parent) {
            ((XElement)parent.Tag).Elements().Select(n => new TreeViewItem() {
                Header = string.Format("{0} {1}", n.Name.LocalName.Trim(), n.Elements().Count() > 0 ? "" : ": " + n.Value.Trim()), Tag = n
            }).All(n => parent.Items.Add(n) > -1);
            foreach (TreeViewItem item in parent.Items) {
                FillItem(item);
            }
        }
Результат (рекурсия, как и заказывалось):

...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943672
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно Microsoft поступает... Я удалил у себя на SkyDrive файл, линк на который дал выше, файл исчез... Но линк по прежнему работает. Вывод - то, что я удаляю, Microsoft бережно продолжает хранить у себя, вроде как "досье на меня", не удаляя на самом деле... Это очень нехорошо...
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943701
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни хрена не открывает. Может у тебя закэшировалось?
...
Рейтинг: 0 / 0
Динамическое заполнение TreeView из XML
    #36943710
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredНи хрена не открывает. Может у тебя закэшировалось?
точно, кэш очистил - линк работать перестал.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Динамическое заполнение TreeView из XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]