Aracılığıyla paylaş


Nasıl yapılır: XML Sorgu Sonuçları için XDocument, XElement veya LINQ'ya Bağlama

Bu örnekte, kullanarak XDocumentxml verilerinin nasıl bağlanacağınız ItemsControl gösterilmektedir.

Örnek

Aşağıdaki XAML kodu bir ItemsControl tanımlar ve XML ad alanında türündeki Planethttp://planetsNS veriler için bir veri şablonu içerir. Ad alanını kaplayan bir XML veri türü, ad alanını küme ayraçlarına içermelidir ve bir XAML işaretleme uzantısının görünebileceği bir yerde görünürse, ad alanının önüne küme ayracı kaçış dizisi eklenmelidir. Bu kod, sınıfın ve Attribute yöntemlerine Element karşılık gelen dinamik özelliklere XElement bağlanır. Dinamik özellikler, XAML'nin yöntemlerin adlarını paylaşan dinamik özelliklere bağlanmasına olanak tanır. Daha fazla bilgi edinmek için bkz . LINQ to XML dinamik özellikleri. XML için varsayılan ad alanı bildiriminin öznitelik adlarına uygulanmadığını fark edin.

<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>

Aşağıdaki C# kodu, yığın paneli veri bağlamını çağırır Load ve XML ad alanında adlı SolarSystemPlanets öğenin tüm alt öğelerine http://planetsNS ayarlar.

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()

XML verileri kullanılarak ObjectDataProviderbir XAML kaynağı olarak depolanabilir. Tam bir örnek için bkz . L2DBForm.xaml kaynak kodu. Aşağıdaki örnek, kodun veri bağlamını bir nesne kaynağına nasıl ayarlayabileceğini gösterir.

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()

XAML içinde ile eşlenip ElementAttribute esneklik sağlayan dinamik özellikler. Kodunuz, XML için LINQ sorgusunun sonuçlarına da bağlanabilir. Bu örnek, bir öğe değerine göre sıralanmış sorgu sonuçlarına bağlanır.

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

Ayrıca bkz.