将 XML 文件绑定到列表框后项目不显示
Items doesn't show up after binding an XML file to a ListBox
我想将 XML 文件绑定到列表框。问题是 ListBox 中的项目在绑定到 XML 文件后没有显示。
我已将 ListBox 中的 ItemsSource 设置为 StaticResource,但它不起作用,它不会显示在 Visual Studio 的设计器或应用程序本身中。
这里是 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>
我希望它能正常工作并出现,但肯定有一些我不知道的错误。
有几项:
首先,确保您的 'SubjectList.xml' 文件的构建操作 属性 设置为 'Content'。
其次,从 ListBox
的 ItemsSource 中删除 'XPath' 东西,这会造成一些麻烦。你只需要 ItemsSource="{Binding Source={StaticResource SubjectData}}"
第三,这是最重要的,您的 XML 文件设置不正确。完成上述两项更改后,将 ListBox
更改为 DataGrid
进行快速测试,它会突出显示 XML 文件的问题:
在此屏幕截图中很难看出,但请查看 'Value' 列。它是空的。您的 XML 文件设置在您的数据存储在 'Attributes' 中的位置,特别是 'Name' 属性,如您查看 'OuterXML' 列中所见。 XMlDataProvider 默认抓取 XML 文件中的 Value
s。这些你都没有。
存储 XML 数据的更好方法可能是:
<Subjects>
<Subject>Subject1</Subject>
<Subject>Subject2</Subject>
<Subject>Subject3</Subject>
<Subject>Subject4</Subject>
</Subjects>
如果你这样做,你会得到预期的结果:
我想将 XML 文件绑定到列表框。问题是 ListBox 中的项目在绑定到 XML 文件后没有显示。
我已将 ListBox 中的 ItemsSource 设置为 StaticResource,但它不起作用,它不会显示在 Visual Studio 的设计器或应用程序本身中。
这里是 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>
我希望它能正常工作并出现,但肯定有一些我不知道的错误。
有几项:
首先,确保您的 'SubjectList.xml' 文件的构建操作 属性 设置为 'Content'。
其次,从 ListBox
的 ItemsSource 中删除 'XPath' 东西,这会造成一些麻烦。你只需要 ItemsSource="{Binding Source={StaticResource SubjectData}}"
第三,这是最重要的,您的 XML 文件设置不正确。完成上述两项更改后,将 ListBox
更改为 DataGrid
进行快速测试,它会突出显示 XML 文件的问题:
在此屏幕截图中很难看出,但请查看 'Value' 列。它是空的。您的 XML 文件设置在您的数据存储在 'Attributes' 中的位置,特别是 'Name' 属性,如您查看 'OuterXML' 列中所见。 XMlDataProvider 默认抓取 XML 文件中的 Value
s。这些你都没有。
存储 XML 数据的更好方法可能是:
<Subjects>
<Subject>Subject1</Subject>
<Subject>Subject2</Subject>
<Subject>Subject3</Subject>
<Subject>Subject4</Subject>
</Subjects>
如果你这样做,你会得到预期的结果: