首页 > 解决方案 > 将 XML 文件绑定到 ListBox 后,项目不显示

问题描述

我想将 XML 文件绑定到 ListBox。问题是 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>

我预计这会起作用并出现,但肯定有一些我不知道的错误。

标签: c#xmlwpfbindinglistbox

解决方案


有几个项目:

首先,确保您的“SubjectList.xml”文件的构建操作属性设置为“内容”。

其次,从您的 ItemsSource 中删除“XPath”内容ListBox,这会造成一些麻烦。你只需要ItemsSource="{Binding Source={StaticResource SubjectData}}"

第三,这是一个大问题,您的 XML 文件设置不正确。完成上述两项更改后,将您的更改ListBox为 aDataGrid以进行快速测试,它将突出显示 XML 文件的问题:

在此处输入图像描述

在此屏幕截图中很难看到,但请查看“价值”列。它是空的。您的 XML 文件设置在您的数据存储在“属性”中的位置,特别是“名称”属性,如果您在“OuterXML”列中查看,您可以看到。XMlDataProvider 默认抓取ValueXML 文件中的 s。你没有这些。

存储 XML 数据的更好方法可能是:

<Subjects>
  <Subject>Subject1</Subject>
  <Subject>Subject2</Subject>
  <Subject>Subject3</Subject>
  <Subject>Subject4</Subject>
</Subjects>

如果你这样做,你会得到预期的结果:

在此处输入图像描述


推荐阅读