Как получить дочернее местоположение в виде дерева? - PullRequest
2 голосов
/ 15 июня 2011

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

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

int val = TreeView.SelectedItemProperty.GlobalIndex;

но всегда возвращает 0. Я видел несколько примеров в VB, но мне кажется, что я не могу получить ту же идею для работы в C #.

Ответы [ 3 ]

1 голос
/ 15 июня 2011

Я думаю, что ответом на все ваши древовидные проблемы (и большинство проблем с пользовательским интерфейсом) в wpf является создание ViewModel. Каждый раз, когда вы начинаете сканировать визуальное дерево, чтобы найти элементы, к которым вы уже привязаны, вы делаете вещи трудным путем. После того, как вы начнете использовать ItemsContainerGenerator, вы должны начать беспокоиться о множестве проблем, которые вам не нужно.

Вы привязываетесь к иерархической структуре. Если эта структура имеет свойство выбранного элемента для каждого элемента и оно связано с выбранным элементом TreeViewItem, то вы можете просто получить выбранный элемент в коде и делать все остальное оттуда. Посмотрите на похожий вопрос здесь .

1 голос
/ 15 июня 2011

Вы должны использовать свойство ItemContainerGenerator для Treeview.

http://msdn.microsoft.com/en-us/library/system.windows.controls.itemcontainergenerator.aspx

См .: ContainerFromIndex и IndexFromContainer

Обратите внимание, что каждый TreeViewItem также имеет ItemContainerGenerator (егоItemsControl), поэтому вам придется рекурсивно искать по дереву, если у вас несколько уровней.

0 голосов
/ 19 июня 2011

Так что я не нашел ответ, который искал (возможно, я перепутал других с тем, что было с моим вопросом, говоря местоположение)Как бы то ни было, я решил, что выбрал строковое значение выбранного ребенка и сравнил его со своим списком.Спасибо тем, кто ответил!

...