从SelectionChanged事件启动的方法返回一个值

时间:2017-10-11 18:40:13

标签: c# wpf methods listbox

我在xaml中有ListBox项,它从一个从xml文件中读取项的方法获取ListBoxItems。

我已成功加载列表,并且我还有一个可以通过应用程序将项目添加到列表的功能。现在我需要一种方法来删除这些项目。我想通过从列表中选择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才能按下按钮(并且我测试了在消息框中收到的值,它显示了正确的值)。

有什么想法吗?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

感谢帖子编辑。

我建议您使用ObservableCollection<string>来显示要显示的项目列表,并将此可观察集合绑定到XMLista.ItemsSource(或在后面的代码中分配)。现在仅对此ObsevableCollection进行操作(添加或删除项目)。这是在WPF中使用集合控件的推荐方法,没有人对此有任何疑问。

我猜测您获得的异常可能是由于错误地在XMLista.Items级别上操作引起的。