我有一个地理对象的结构:
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,当我点击某个地区,省,市或酒店时
答案 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。
我希望这就是你想要的。