Элементы не отображаются после привязки XML-файла к ListBox - PullRequest
1 голос
/ 07 апреля 2019

Я хочу связать файл XML с ListBox.Проблема в том, что элементы в ListBox не отображаются после привязки его к XML-файлу.

Я установил ItemsSource в ListBox на StaticResource, но он не работает, он не отображается в VisualДизайнер студии или в самом приложении.

Вот код 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>

Я ожидал, что это сработает и появится, ноопределенно что-то не так, о чем я понятия не имею.

1 Ответ

1 голос
/ 07 апреля 2019

Есть пара предметов:

Прежде всего, убедитесь, что для вашего файла SubjectList.xml свойство Build Action имеет значение «Content».

Во-вторых, удалите материал 'XPath' из ItemsSource вашего ListBox, что вызывает некоторые проблемы. Вам нужно всего лишь ItemsSource="{Binding Source={StaticResource SubjectData}}"

В-третьих, и это главное, ваш XML-файл настроен не совсем правильно. После внесения двух изменений, указанных выше, замените ListBox на DataGrid для быстрого теста, и это выявит проблему с файлом XML:

enter image description here

Это довольно трудно увидеть на этом скриншоте, но посмотрите столбец «Значение». Оно пустое. Ваш XML-файл настроен так, что ваши данные хранятся в «Атрибутах», в частности, в атрибуте «Имя», как вы можете видеть, просматривая столбец «OuterXML». XMlDataProvider по умолчанию захватывает Value s в файле XML. У вас их нет.

Лучшим способом хранения ваших XML-данных может быть:

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

Если вы сделаете это, вы получите ожидаемый результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...