无法返回TreeView的根节点

时间:2015-08-28 10:35:37

标签: c# wpf

我想在TreeView中获取所选项目的根节点,例如,如果我是:

Italy
     Serie A 

并且用户选择Serie A,在代码中返回意大利父根。 所以我在方法中创建了这个变量:

var country = FindRootNode(nation_team.SelectedItem);

这是方法:

private TreeViewItem FindRootNode(TreeView treeNode)
{
    while (treeNode.Parent != null)
    {
        treeNode = (TreeView)treeNode.Parent;
    }
     return treeNode;
}

但我不确定此代码是否正确,无论如何,return treeNode带有红色下划线,出现此错误:

  

无法在System.Windows.Controls.TreeViewItem中隐式转换System.Windows.Controls.TreeView类型

1 个答案:

答案 0 :(得分:1)

您正在为treeNode对象分配TreeView TreeViewItem个对象。

这一行:

treeNode = (TreeView)treeNode.Parent;

在使用它之前,请确保将SelectedItem强制转换为TreeViewItem,如下所示:

FindRootNode(nation_team.SelectedItem as TreeViewItem) 

您正在寻找的是这种递归方法:

private TreeViewItem FindRootNode(TreeViewItem currentItem){

    if(currentItem == null) return null;
    var tvi = (TreeViewItem)currentItem.Parent;
    if(tvi == null){
      return currentItem;
    }
    else{
        return FindRootNode(tvi);
    }
}

或者这个迭代的:

private TreeViewItem FindRootNode(TreeViewItem currentItem){
     if(currentItem == null) return null;
     while(currentItem.Parent as TreeViewItem!= null){
         currentItem = currentItem.Parent as TreeViewItem;
     }
     return currentItem;
}