Bagikan melalui


Cara: Mengikat ke XDocument, XElement, atau LINQ untuk Hasil Kueri XML

Contoh ini menunjukkan cara mengikat data XML ke ItemsControl menggunakan XDocument.

Contoh

Kode XAML berikut mendefinisikan ItemsControl dan menyertakan templat data untuk data jenis Planet di http://planetsNS namespace XML. Jenis data XML yang menempati namespace harus menyertakan namespace dalam kurung kurawal, dan jika muncul di mana ekstensi markup XAML dapat muncul, itu harus mendahului namespace dengan urutan escape kurung kurawal. Kode ini mengikat properti dinamis yang sesuai dengan Element metode XElement dan Attribute kelas. Properti dinamis memungkinkan XAML untuk mengikat properti dinamis yang berbagi nama metode. Untuk mempelajari selengkapnya, lihat Properti dinamis LINQ ke XML. Perhatikan bagaimana deklarasi namespace default untuk XML tidak berlaku untuk nama atribut.

<StackPanel Name="stacky">
  <StackPanel.Resources>
    <DataTemplate DataType="{}{http://planetsNS}Planet" >
      <StackPanel Orientation="Horizontal">
        <TextBlock Width="100" Text="{Binding Path=Element[{http://planetsNS}DiameterKM].Value}" />
        <TextBlock Width="100" Text="{Binding Path=Attribute[Name].Value}" />
        <TextBlock Text="{Binding Path=Element[{http://planetsNS}Details].Value}" /> 
      </StackPanel>
    </DataTemplate>
  </StackPanel.Resources>
  <ItemsControl 
    ItemsSource="{Binding }" >
  </ItemsControl>
</StackPanel>

Kode C# berikut memanggil Load dan mengatur konteks data panel tumpukan ke semua subelemen elemen bernama SolarSystemPlanets di http://planetsNS namespace XML.

planetsDoc = XDocument.Load("../../Planets.xml");
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
planetsDoc = XDocument.Load("../../Planets.xml")
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()

Data XML dapat disimpan sebagai sumber daya XAML menggunakan ObjectDataProvider. Untuk contoh lengkapnya, lihat Kode sumber L2DBForm.xaml. Contoh berikut menunjukkan bagaimana kode dapat mengatur konteks data ke sumber daya objek.

planetsDoc = (XDocument)((ObjectDataProvider)Resources["justTwoPlanets"]).Data;
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements();
planetsDoc = CType((CType(Resources("justTwoPlanets"), ObjectDataProvider)).Data, XDocument)
stacky.DataContext = planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()

Properti dinamis yang memetakan ke Element dan Attribute memberikan fleksibilitas dalam XAML. Kode Anda juga dapat mengikat hasil LINQ untuk kueri XML. Contoh ini mengikat hasil kueri yang diurutkan oleh nilai elemen.

stacky.DataContext =
from c in planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
orderby Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
select c;
stacky.DataContext = From c In planetsDoc.Element("{http://planetsNS}SolarSystemPlanets").Elements()
                     Order By Int32.Parse(c.Element("{http://planetsNS}DiameterKM").Value)
                     Select c

Baca juga