从具有HierarchicalDataTemplate的treeview获取逻辑路径

时间:2010-04-23 13:01:04

标签: c# wpf treeview

我有一个地理对象的结构:

Country
Areas,
Provinces,
Cities
and Hotels

国家有地区,地区有省,省有城市,城有酒店。  当我点击City节点时,我想获得合理的路径,例如:France,Provanse,SomeProvince,Montpellier,Grand Hotel。

每个类都有字段:name,code nad listOf ...

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 **`

给我null,当我点击某个地区,省,市或酒店时

3 个答案:

答案 0 :(得分:0)

您可以在其标签或某处存储树项的名称, 并且在SelectedItemChanged以递归方式遍历树到最顶层的项目并构建路径字符串。

答案 1 :(得分:0)

您可以读取每个TreeviewItem的DataContext属性,并获取项目(Country,Areas,Provinces,Cities等)。读取名称(例如)并在遍历树时递归追加到路径字符串中。

答案 2 :(得分:0)

我创建了一个树视图,如下所示:

<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。

我希望这就是你想要的。