XmlDataProvider используется для подключения к xml-документам. Причем xml-документом в данном случае может быть и локальный xml-файл, и xml из интернета. Для организации связи с источником данных XmlDataProvider использует следующие свойства:
Source: устанавливает источник данных
XPath: задает путь внутри документа xml к целевому набору данных
Document: устанавливает ссылку на xml-документ
IsAsynchronous: при значении true загружает данные асинхронно
К примеру, определим в проекте файл phones.xml:
<?xml version="1.0" encoding="utf-8" ?> <phones> <phone> <id>1</id> <title>Lumia 950</title> <company>Microsoft</company> </phone> <phone> <id>2</id> <title>Elite X3</title> <company>HP</company> </phone> <phone> <id>3</id> <title>Fierce XL</title> <company>Alcatel</company> </phone> </phones>
Теперь обратимся к этому файлу через XmlDataProvider:
<Window x:Class="DataProvidersApp.MainWindow" 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:DataProvidersApp" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <XmlDataProvider x:Key="phonesProvider" Source="phones.xml" XPath="phones" /> </Window.Resources> <Grid> <ListBox x:Name="phonesList" DisplayMemberPath="title" ItemsSource="{Binding Source={StaticResource phonesProvider}, XPath=phone}" /> </Grid> </Window>
XmlDataProvider определяется как ресурс. Его свойству Source
присваивается название xml-файла. Свойство XPath
указывает, что все данные для провайдера в файле будет находиться в рамках элемента <phones>
.
В элементе ListBox как обычно устанавливаем свойство ItemsSource
, при этом используя параметр привязки XPath. В данном случае он
указывает на элемент из xml, на основе которого будут создаваться элементы в ListBox, то есть элемент <phone>
.
Здесь важно отметить, что в XPath используются регистрозависимые строки. То есть в файле xml определен элемент <phones>
- с маленькой буквы,
поэтому в XPath также используется название с маленькой буквы: XPath="phones"
. То же самое касается и свойства DisplayMemberPath="title"
.
В итоге у нас получится следующий список: