Megosztás a következőn keresztül:


Útmutató: Hogyan kapcsolódjunk vagy kössünk XDocumenthez, XElementhez vagy LINQ-hoz XML-lekérdezési eredményekhez.

Ez a példa bemutatja, hogyan lehet XML-adatokat egy ItemsControl-hoz hozzákötni XDocumenthasználatával.

példa

A következő XAML-kód definiál egy ItemsControl, és tartalmaz egy adatsablont a Planet XML-névtérben http://planetsNS típusú adatokhoz. Névteret foglaló XML-adattípusnak kapcsos zárójelek közé kell helyeznie a névteret, és ha olyan helyen jelenik meg, ahol XAML-jelölőbővítmény fordulhat elő, akkor a névtér elé egy zárójelek közti elválasztási sorozatot kell tenni. Ez a kód a Element osztály Attribute és XElement metódusainak megfelelő dinamikus tulajdonságokhoz kötődik. A dinamikus tulajdonságok lehetővé teszik, hogy az XAML olyan dinamikus tulajdonságokhoz kössön, amelyek megosztják a metódusok nevét. További információ: LINQ–XML dinamikus tulajdonságok. Figyelje meg, hogy az XML alapértelmezett névtér-deklarációja nem vonatkozik az attribútumnevekre.

<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 következő C#-kód meghívja Load, és beállítja a verempanel adatkörnyezetét az SolarSystemPlanets XML-névtérben http://planetsNS nevű elem összes alelemére.

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

Az XML-adatok XAML-erőforrásként tárolhatók ObjectDataProviderhasználatával. Az egész példáért tekintse meg a L2DBForm.xaml forráskódot. Az alábbi minta bemutatja, hogyan állíthatja be a kód az adatkörnyezetet egy objektumerőforrásra.

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

A Element és Attribute megfeleltetendő dinamikus tulajdonságok rugalmasságot biztosítanak az XAML-ben. A kód egy XML-lekérdezés LINQ-jának eredményeihez is kapcsolódhat. Ez a példa egy elemérték alapján rendezett lekérdezési eredményekhez kapcsolódik.

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

Lásd még