从TreeView获取父级时出现System.NullReferenceException?

时间:2014-08-27 16:51:04

标签: c# wpf treeview

我在C#WPF中处于novince级别。作为一名学生,我愿意学习并希望得到一些建议。

我想编写一个代码,我可以通过单击DELETE按钮从TreeView中删除单个项目。我想我已经正确地实现了代码,但最后我还是得到了System.NullReferenceException。 “对象引用未设置为对象的实例。”

我也会在这里粘贴我的代码。

private void Functions_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.Key)
            {
                case Key.Delete:
                    DeleteData_Functions();
                    break;
                default:
                    break;
            }
        }

public void DeleteData_Functions()
        {
            TreeViewItem parent = (tv_Function.SelectedItem as TreeViewItem).Parent as TreeViewItem;
            parent.Items.Remove(tv_Function.SelectedItem);
        }

tv_Function是我的TreeView的名称。我想当我选择要删除的项目并单击删除时,它应该返回一些值而不是null。

非常感谢任何帮助或提示。提前谢谢。

1 个答案:

答案 0 :(得分:2)

 TreeViewItem t1=tv_Function.SelectedItem as TreeViewItem;
 if(t1==null)
       return;//or throw exception or whatever you want

 TreeViewItem parent =t1.Parent as TreeViewItem;
 if(parent==null)
       return;//or throw exception or whatever you want


 parent.Items.Remove(tv_Function.SelectedItem);

你的问题是其中一个变量不是TreeViewItem(或者是,它是null)

如果您需要将所选项目作为TreeViewItem使用此代码

 TreeViewItem t1 = tv_Function.ItemContainerGenerator.ContainerFromItem(tv_Function.SelectedItem) as TreeViewItem; 

如果您已经设置了树的ItemSource属性,那么"删除"线不起作用。

从像

这样的itemsource中删除对象
Software t1 = myTree.SelectedItem as Software;
TheTreesItemSourceCollection.Remove(t1);