我在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才能按下按钮(并且我测试了在消息框中收到的值,它显示了正确的值)。
有什么想法吗?
答案 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级别上操作引起的。