Получить логический путь из дерева, которое имеет HierarchicalDataTemplate - PullRequest
1 голос
/ 23 апреля 2010

У меня есть структура объектов географии:

Country
Areas,
Provinces,
Cities
and Hotels

Страна имеет районы, районы имеют провинции, города имеют города, а города имеют отели.Когда я нажму на Городской узел, я хочу получить логический путь, например: Франция, Прованс, SomeProvince, Монпелье, Гранд Отель.

У каждого класса есть поля: имя, код и список из списка ...

Treeview отлично работает, но этот метод не так:

 private void structureTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
if (structureTree.SelectedItem is Hotel)
            {
                objectCode = ((Hotel)structureTree.SelectedItem).Code;
                TreeViewItem item = e.OriginalSource as TreeViewItem;
                DependencyObject parent = VisualTreeHelper.GetParent(item);
                dlgEditHotel(objectCode, structureTree.Parent.ToString());
            }
          }

`**structureTree.SelectedItem as TreeViewItem **`

дает мне ноль, когда я нажимаю на какую-то область, провинцию, город или отель

Ответы [ 3 ]

0 голосов
/ 24 апреля 2010

вы можете прочитать свойство DataContext каждого TreeviewItem и получить элемент (Страна, Районы, Провинции, Города и т. Д.).Прочитайте имя (например) и рекурсивно добавьте в строку пути при обходе дерева.

0 голосов
/ 29 апреля 2010

Я создал древовидную структуру следующим образом:

<TreeView Name="tree">
            <TreeViewItem Header="Country" Selected="GetName">
                <TreeViewItem Header="Areas" Selected="GetName">
                    <TreeViewItem Header="Provinces" Selected="GetName">
                        <TreeViewItem Header="Cities" Selected="GetName">
                            <TreeViewItem Header="Hotels" Selected="GetName">
                            </TreeViewItem>
                        </TreeViewItem>
                    </TreeViewItem>
                </TreeViewItem>

            </TreeViewItem>

        </TreeView>

Теперь метод GetName будет делать что-то вроде этого:

private void GetName(object sender, RoutedEventArgs e)
        {
            TreeViewItem item = (TreeViewItem)sender;
            name = item.Header + "." + name;
            if (!(item.Parent is TreeViewItem))
            {
                MessageBox.Show(name);
            }

        }

В конце MessageBox покажет имя как

Country.Areas.Provinces.Cities.Hotels.

Надеюсь, это то, что вы хотели.

0 голосов
/ 23 апреля 2010

вы можете хранить названия элементов дерева в их тегах или где-то еще, и в SelectedItemChanged рекурсивно обходит дерево до самого верхнего элемента и создает строку пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...