2014-08-27 90 views
0

我在C#WPF的初學者水平。作爲一名學生,我願意學習並希望得到一些建議。System.NullReferenceException從TreeView獲取父級?

我想編寫一個代碼,我可以通過單擊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。

任何幫助或提示都非常感謝。先謝謝你。

+0

的你將得到的是使用MVVM信息最有用的部分;這不是WinForms。 – Kcvin 2014-08-28 01:33:12

回答

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 t1 = tv_Function.ItemContainerGenerator.ContainerFromItem(tv_Function.SelectedItem) as TreeViewItem; 

如果你已經設置了樹的ItemSource屬性,你的「刪除」行將不起作用。

從的ItemSource刪除對象這樣

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

謝謝你的回答喬治。是的,如果我像這樣執行沒有錯誤發生,但該項目仍然不能被刪除。有些奇怪。當我將tv_Function.SelectedItem'作爲Software.Function'(我的TreeViewItem的類作爲ObservableCollection)寫入時,它不返回null(但是如果'作爲TreeViewItem',它將返回null)。我只是在TreeView上選擇相同的項目。 – user3481276 2014-08-27 17:06:50

+0

@ user3481276查看我的更新回答 – 2014-08-27 17:30:30

+0

非常感謝喬治,我解決了我的問題。 =) – user3481276 2014-08-28 07:01:53