【发布时间】:2019-04-08 23:31:13
【问题描述】:
我有一个简单的窗口,其中 XML 节点作为项目加载到 ListBox。现在我想通过从该 ListBox 中选择一个项目并单击要删除的按钮来删除一些节点。
我尝试将所选项目存储到变量中,如果 InnerText 在 XML 中与 ListBox 中的所选项目具有相同的值,则该变量将进行比较。但肯定有问题,因为它不起作用。
C#代码:
static string projectDirectory = Directory.GetParent(workingDirectory).Parent.FullName;
static string xmlLocation = System.IO.Path.Combine(projectDirectory, "SubjectList.xml");
string selectedSubjectItem;
private void DeleteSubjectButton_Click(object sender, RoutedEventArgs e)
{
XmlDocument document = new XmlDocument();
document.Load(xmlLocation);
foreach(XmlNode node in document.SelectNodes("Subjects/Subject"))
{
if (node.SelectSingleNode("Subject").InnerText == selectedSubjectItem)
{
node.ParentNode.RemoveChild(node);
}
document.Save(xmlLocation);
}
}
private void SubjectList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
selectedSubjectItem = SubjectList.SelectedItem.ToString();
}
XAML 代码:
<Grid>
<Grid.Resources>
<XmlDataProvider x:Key="SubjectData" Source="SubjectList.xml" XPath="/Subjects/Subject"/>
</Grid.Resources>
<DockPanel Margin="10">
<StackPanel DockPanel.Dock="Right" Margin="10,0,0,0">
<Button Name="AddSubjectButton" Margin="0,0,0,5" Click="AddSubjectButton_Click">Add</Button>
<Button Name="DeleteSubjectButton" Click="DeleteSubjectButton_Click">Delete</Button>
</StackPanel>
<StackPanel DockPanel.Dock="Left">
<ListBox x:Name="SubjectList" Margin="0,0,0,0" ItemsSource="{Binding Source={StaticResource SubjectData}}" ScrollViewer.VerticalScrollBarVisibility="Visible" Height="175" SelectionChanged="SubjectList_SelectionChanged"></ListBox>
<TextBox x:Name="InputNewSubject" Text="Input new subject..."/>
</StackPanel>
</DockPanel>
</Grid>
</Window>
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Subjects>
<Subject>Subject1</Subject>
<Subject>Subject2</Subject>
<Subject>Subject3</Subject>
</Subjects>
【问题讨论】:
-
“不起作用”不能作为 SO 问题陈述。您遇到的行为是什么?