Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Contoh ini menunjukkan cara mengikat data XML menggunakan XmlDataProvider.
Dengan XmlDataProvider, data dasar yang dapat diakses melalui pengikatan data di aplikasi Anda dapat berupa setiap pohon simpul XML. Dengan kata lain, sebuah XmlDataProvider menyediakan cara mudah untuk menggunakan pohon simpul XML apa pun sebagai sumber pengikatan.
Contoh
Dalam contoh berikut, data disematkan langsung sebagai pulau data XML di dalam bagian .Resources Pulau data XML harus dibungkus dalam <x:XData> tag dan selalu memiliki satu simpul akar, yang merupakan Inventori dalam contoh ini.
Nota
Simpul akar data XML memiliki atribut xmlns yang mengatur namespace XML ke string kosong. Ini adalah persyaratan untuk menerapkan kueri XPath ke pulau data yang sebaris dalam halaman XAML. Dalam kasus sebaris ini, XAML, dan dengan demikian pulau data, mewarisi namespace System.Windows. Karena itu, Anda perlu mengatur namespace menjadi kosong agar kueri XPath tidak dikualifikasi oleh namespace System.Windows, yang dapat mengarahkan kueri ke arah yang salah.
<StackPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Cornsilk">
<StackPanel.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
<x:XData>
<Inventory xmlns="">
<Books>
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
<CDs>
<CD Stock="in" Number="3">
<Title>Classical Collection</Title>
<Summary>Classical Music</Summary>
</CD>
<CD Stock="out" Number="9">
<Title>Jazz Collection</Title>
<Summary>Jazz Music</Summary>
</CD>
</CDs>
</Inventory>
</x:XData>
</XmlDataProvider>
</StackPanel.Resources>
<TextBlock FontSize="18" FontWeight="Bold" Margin="10"
HorizontalAlignment="Center">XML Data Source Sample</TextBlock>
<ListBox
Width="400" Height="300" Background="Honeydew">
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}"
XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
</ListBox.ItemsSource>
<!--Alternatively, you can do the following. -->
<!--<ListBox Width="400" Height="300" Background="Honeydew"
ItemsSource="{Binding Source={StaticResource InventoryData},
XPath=*[@Stock\=\'out\'] | *[@Number>\=8 or @Number\=3]}">-->
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding XPath="Title"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
Seperti yang ditunjukkan dalam contoh ini, untuk membuat deklarasi pengikatan yang sama dalam sintaks atribut, Anda harus menghindari karakter khusus dengan benar. Untuk informasi selengkapnya, lihat Entitas Karakter XML dan XAML.
ListBox akan menampilkan item berikut saat contoh ini dijalankan. Ini adalah judul-judul dari semua elemen di bawah Buku dengan nilai Stok "habis" atau Nomor 3 atau lebih besar atau sama dengan 8. Perhatikan bahwa tidak ada item CD yang dikembalikan karena XPath nilai yang ditetapkan pada XmlDataProvider menunjukkan bahwa hanya elemen Buku yang harus diekspos (pada dasarnya mengatur filter).
Dalam contoh ini, judul buku ditampilkan karena XPath pengikatan TextBlock di DataTemplate diatur ke "Judul". Jika Anda ingin menampilkan nilai atribut, seperti ISBN, Anda akan mengatur nilai tersebut XPath ke "@ISBN".
Properti XPath di WPF ditangani oleh metode XmlNode.SelectNodes. Anda dapat mengubah kueri XPath untuk mendapatkan hasil yang berbeda. Berikut adalah beberapa contoh kueri yang terikat pada XPath tapal batas ListBox dari contoh sebelumnya.
XPath="Book[1]"akan mengembalikan elemen buku pertama ("XML in Action"). Perhatikan bahwa indeks XPath didasarkan pada 1, bukan 0.XPath="Book[@*]"akan mengembalikan semua elemen buku dengan atribut apa pun.XPath="Book[last()-1]"akan mengembalikan elemen buku kedua ke terakhir ("Memperkenalkan Microsoft .NET").XPath="*[position()>3]"akan mengembalikan semua elemen buku kecuali 3 elemen pertama.
Saat Anda menjalankan kueri XPath , kueri mengembalikan XmlNode atau daftar XmlNodes. XmlNode adalah objek runtime bahasa umum (CLR), yang berarti Anda dapat menggunakan Path properti untuk mengikat properti runtime bahasa umum (CLR). Pertimbangkan contoh sebelumnya lagi. Jika bagian contoh lainnya tetap sama dan Anda mengubah TextBlock pengikatan ke yang berikut ini, maka Anda akan melihat nama XmlNodes yang dikembalikan pada ListBox. Dalam hal ini, nama semua simpul yang dikembalikan adalah "Buku".
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding Path="Name"/>
</TextBlock.Text>
</TextBlock>
Dalam beberapa aplikasi, menyematkan XML sebagai pulau data dalam sumber halaman XAML dapat merepotkan karena konten data yang tepat harus diketahui pada waktu kompilasi. Oleh karena itu, mendapatkan data dari file XML eksternal juga didukung, seperti dalam contoh berikut:
<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>
Jika data XML berada dalam file XML jarak jauh, Anda akan menentukan akses ke data dengan menetapkan URL yang sesuai ke Source atribut sebagai berikut:
<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>
Lihat juga
.NET Desktop feedback