2017-10-11 60 views
-1

我有一個xaml中的ListBox項目,它從一個從xml文件中讀取項目的方法獲取ListBoxItems。從SelectionChanged事件發起的方法中返回一個值

我有成功加載列表,我也有一個函數,可以通過應用程序添加項目列表。現在我需要一種方法來刪除項目。我想通過從列表中選擇一個ListBoxItem來獲取要刪除的項目。我腦子裏想的是使用SelectionChanged事件,然後使用下面的代碼:

string selected; 

    private void XMLista_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     brisanjeDugme.IsEnabled = true; 
     selected = XMLista.SelectedItem.ToString(); 

    } 

然後我會用它來開拓machineList.xml文件,然後基於價值有刪除,如果父節點該節點等於所選的ListBoxItem。

所以這裏是用於去除方法:

private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 


     XDocument root = XDocument.Load("machineList.xml"); 
     root.Descendants("stampac").Where(p => p.Element("IP").Value == selected).Remove(); // <- selected variable is used here. 
     root.Save("machineList.xml"); 

     XMLista.Items.Clear(); 
     ListBox_Load(sender, e); 
     brisanjeDugme.IsEnabled = false; 

    } 

然而,我在使用在上述方法中,我得到在XMLista_SelectionChanged方法所示的System.NullReferenceException錯誤使用所選擇的可變的問題,其中,線我定義了選定的變量。我不明白爲什麼要這樣做,當我確定按鈕只能按下,如果我有一個選定的listboxitem(並且我測試了在消息箱中收到的值,它顯示正確的值)。

任何想法?

+0

嗨尼古拉。你寫了一個很長的問題,詳細說明了你想要在你的項目中做什麼,但是你沒有提供一個例外的堆棧......試着重寫這個問題,以便我們可以幫你,刪除不必要的細節瞭解這個問題。 –

+0

@swiszcz我試圖更好地發佈我的問題。讓我知道是否有一些缺失,並感謝幫助(和小費)。 –

回答

1

檢查元素都被初始化,並且有一個選定的項目:

private void XMLista_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (brisanjeDugme != null) 
     brisanjeDugme.IsEnabled = true; 
    if(XMLista != null && XMLista.SelectedItem != null) 
     selected = XMLista.SelectedItem.ToString(); 
} 
+0

我測試了這一點,它的工作原理。但我不明白嗎?我非常積極地看到,我獲得了刪除工作所需的價值(我甚至在選擇了一個消息框後向我說明了這一點)。這是如何工作的不同? –

+0

可以在元素初始化之前調用SelectionChanged事件處理程序。 – mm8

0

感謝您的帖子編輯。

我建議您使用ObservableCollection<string>來保持您的項目列表顯示並將此可觀察集合綁定到XMLista.ItemsSource(或在後面的代碼中分配)。現在僅對此ObsevableCollection進行操作(添加或刪除項目)。這是在WPF中使用收集控件的推薦方式,並且沒有人遇到問題。

我猜你得到的異常可能是由在XMLista.Items級別上錯誤操作引起的。