【问题标题】:System.NullReferenceException while getting the parent from a TreeView?从 TreeView 获取父级时出现 System.NullReferenceException?
【发布时间】:2014-10-21 08:55:39
【问题描述】:

我想编写一些代码,我可以通过单击“删除”按钮从 TreeView 中删除单个项目。我想我已经正确实现了代码,但最后我仍然得到一个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。

【问题讨论】:

  • 您将获得的最有用的信息是使用 MVVM;这不是 WinForms。

标签: c# wpf treeview


【解决方案1】:
 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(或者它是并且它为空)

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

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

如果您设置了树的 ItemSource 属性,您的“删除”行将不起作用。

像这样从 itemsource 中移除对象

Software t1 = myTree.SelectedItem as Software;
TheTreesItemSourceCollection.Remove(t1);

【讨论】:

  • 感谢乔治的回答。是的,如果我这样实施,不会发生错误,但该项目仍然无法删除。有什么奇怪的。当我写 tv_Function.SelectedItem 'as Software.Function'(我的 TreeViewItem 的类为 ObservableCollection)时,它不会返回 null,(但如果'as TreeViewItem',它将返回 null)。我只是在 TreeView 上选择相同的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多