مشاركة عبر


كيفية القيام بما يلي: ربط XDocument ، XElement أو LINQ للحصول على نتائج استعلام XML

يوضح هذا المثال كيفية ربط بيانات XML إلى ItemsControl باستخدام XDocument.

مثال

تقوم التعليمة البرمجية التالية الموجودة في XAML بتعريف ItemsControl ويتضمن قالب بيانات للبيانات من نوع Planet في مساحة اسم XMLhttp://planetsNS. نوع البيانات XML الذي يشغل مساحة اسم يجب أن يتضمن مساحة الاسم بين أقواس، و في حالة ظهوره حيث قد يظهر ملحق علامات XAML، يجب أن يسبق مساحة الاسم بسلسلة الإلغاء "أقواس". ترتبط هذه التعليمة البرمجية بخصائص حيوية تتوافق مع أساليب Element و Attribute من فئة XElement. تُمكن الخصائص الحيوية XAML من الربط بالخصائص الحيوية التي تتشابه في أسماء الأساليب. لتعلم المزيد، راجع LINQ to XML Dynamic Properties. لاحظ عدم تطبيق إقرار مساحة الاسم الافتراضية الخاصة بـ XML على أسماء السمة.

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

تستدعي التعليمات البرمجية C# التالية Load و تقوم بتعيين سياق بيانات لوحة المكدس إلى كافة العناصر الفرعية المنتمية إلى العنصر المسمى SolarSystemPlanets في مساحة اسم XML 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 يمكن تخزينها باعتبارها مورد XAML باستخدام ObjectDataProvider. لمثال كامل، راجع L2DBForm.xaml Source Code. يبين النموذج التالي كيف تعين تعليمات برمجية سياق البيانات إلى مورد كائن.

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

الخصائص الحيوية التي تخطط إلى Element و Attribute توفر المرونة داخل XAML. يمكن أيضاً ربط التعليمات البرمجية إلى نتائج LINQ لاستعلام XML. يرتبط هذا المثال بنتائج الاستعلام مرتبة تبعا لقيمة العنصر.

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

راجع أيضًا:

المبادئ

نظرة عامة حول مصادر الربط

WPF Data Binding with LINQ to XML Overview

WPF Data Binding Using LINQ to XML Example

LINQ to XML Dynamic Properties