我想将XML文件绑定到ListBox。问题在于,将ListBox绑定到XML文件后,它们不会显示出来。
我已将ListBox中的ItemsSource设置为StaticResource,但它不起作用,它不会显示在Visual Studio的Designer或应用程序本身中。
以下是XAML代码:
<Window x:Class="StudyNotes.ModifySubjectListWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:StudyNotes"
mc:Ignorable="d"
Title="" Height="150" Width="300" ResizeMode="NoResize">
<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">Add</Button>
<Button Name="DeleteSubjectButton">Delete</Button>
</StackPanel>
<ListBox x:Name="SubjectList" ItemsSource="{Binding Source={StaticResource SubjectData}, XPath=/Subjects/Subject}"></ListBox>
</DockPanel>
</Grid>
</Window>
以下是XML文档:
<?xml version="1.0" encoding="utf-8" ?>
<Subjects>
<Subject Name="Subject1"/>
<Subject Name="Subject2"/>
<Subject Name="Subject3"/>
<Subject Name="Subject4"/>
</Subjects>
我希望它能正常工作并显示出来,但是肯定有我不知道的错误。
答案 0 :(得分:1)
有两个项目:
首先,请确保您的“ SubjectList.xml”文件的“构建操作”属性设置为“内容”。
第二,从ListBox
的ItemsSource中删除“ XPath”内容,这会带来一些麻烦。您只需要ItemsSource="{Binding Source={StaticResource SubjectData}}"
第三,这是个大问题,您的XML文件设置不正确。完成上述两项更改后,将ListBox
更改为DataGrid
进行快速测试,它将突出显示XML文件的问题:
在此屏幕截图中很难看到,但请查看“值”列。它是空的。设置XML文件的位置就是数据存储在“属性”(特别是“名称”属性)中的位置,您可以查看是否在“ OuterXML”列中进行查看。默认情况下,XMlDataProvider捕获XML文件中的Value
。你什么都没有。
一种更好的存储XML数据的方法可能是:
<Subjects>
<Subject>Subject1</Subject>
<Subject>Subject2</Subject>
<Subject>Subject3</Subject>
<Subject>Subject4</Subject>
</Subjects>
如果这样做,您将得到预期的结果: