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

Bu örnek, bir kullanarak XML verilerinin nasıl bağlanacağını gösterir ItemsControlXDocument .

Örnek

Aşağıdaki XAML kodu bir tanımlar ItemsControl ve Planet XML ad alanındaki türü veri için bir veri şablonu içerir http://planetsNS . Bir ad alanını kaplayan bir XML veri türü, küme ayracı içine ad alanını içermelidir ve bir XAML biçimlendirme uzantısının görünebileceği yerde görünürse, ad alanından önce ayraç kaçış dizisi ile önce gelmelidir. Bu kod, Element sınıfının ve yöntemlerine karşılık gelen dinamik özelliklere bağlanır AttributeXElement . Dinamik özellikler, XAML 'nin yöntemlerin adlarını paylaşan dinamik özelliklere bağlamasını sağlar. daha fazla bilgi için bkz. LINQ to XML dinamik özellikler. XML için varsayılan ad alanı bildiriminin öznitelik adlarına nasıl uygulanmadığından dikkat 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, Load yığın paneli veri bağlamını, SolarSystemPlanets XML ad alanında adlı öğenin tüm alt öğeleri için çağırır ve ayarlar http://planetsNS .

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, kullanarak XAML kaynağı olarak depolanabilir ObjectDataProvider . Tüm örnek için bkz . L2DBForm. xaml kaynak kodu. Aşağıdaki örnek, kodun veri bağlamını bir nesne kaynağına nasıl ayarlayagösterdiğ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()

ElementAttribute XAML içinde eşleme ve esneklik sağlayan dinamik özellikler. Kodunuz Ayrıca bir LINQ for XML sorgusu sonuçlarına bağlanabilir. Bu örnek, bir öğe değeri tarafından sıralanan 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.