Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a példa bemutatja, hogyan lehet XML-adatokhoz kötést létrehozni egy XmlDataProviderhasználatával.
Egy XmlDataProvideresetén az alkalmazás adatkötésével elérhető mögöttes adatok az XML-csomópontok bármely fáját tartalmazhatják. Más szóval egy XmlDataProvider kényelmes módot kínál az XML-csomópontok bármely fájának kötési forrásként való használatára.
példa
Az alábbi példában az adatok közvetlenül XML-adatszigetként ágyazódnak be a Resources szakaszba. Az XML-adatszigeteket <x:XData> címkékbe kell burkolni, és mindig egyetlen gyökércsomópontot kell tartalmaznia, amely ebben a példában Inventory.
Megjegyzés:
Az XML-adatok gyökércsomópontja egy xmlns attribútummal rendelkezik, amely az XML-névteret üres sztringre állítja. Ez az XPath-lekérdezések XAML-lapon belüli adatszigetre való alkalmazásának követelménye. Ebben a beágyazott esetben az XAML és így az adatsziget örökli a System.Windows névteret. Emiatt üresen kell beállítania a névteret, hogy az XPath-lekérdezéseket ne minősítse a System.Windows névtér, ami félrevezetné a lekérdezéseket.
<StackPanel
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Cornsilk">
<StackPanel.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
<x:XData>
<Inventory xmlns="">
<Books>
<Book ISBN="0-7356-0562-9" Stock="in" Number="9">
<Title>XML in Action</Title>
<Summary>XML Web Technology</Summary>
</Book>
<Book ISBN="0-7356-1370-2" Stock="in" Number="8">
<Title>Programming Microsoft Windows With C#</Title>
<Summary>C# Programming using the .NET Framework</Summary>
</Book>
<Book ISBN="0-7356-1288-9" Stock="out" Number="7">
<Title>Inside C#</Title>
<Summary>C# Language Programming</Summary>
</Book>
<Book ISBN="0-7356-1377-X" Stock="in" Number="5">
<Title>Introducing Microsoft .NET</Title>
<Summary>Overview of .NET Technology</Summary>
</Book>
<Book ISBN="0-7356-1448-2" Stock="out" Number="4">
<Title>Microsoft C# Language Specifications</Title>
<Summary>The C# language definition</Summary>
</Book>
</Books>
<CDs>
<CD Stock="in" Number="3">
<Title>Classical Collection</Title>
<Summary>Classical Music</Summary>
</CD>
<CD Stock="out" Number="9">
<Title>Jazz Collection</Title>
<Summary>Jazz Music</Summary>
</CD>
</CDs>
</Inventory>
</x:XData>
</XmlDataProvider>
</StackPanel.Resources>
<TextBlock FontSize="18" FontWeight="Bold" Margin="10"
HorizontalAlignment="Center">XML Data Source Sample</TextBlock>
<ListBox
Width="400" Height="300" Background="Honeydew">
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}"
XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
</ListBox.ItemsSource>
<!--Alternatively, you can do the following. -->
<!--<ListBox Width="400" Height="300" Background="Honeydew"
ItemsSource="{Binding Source={StaticResource InventoryData},
XPath=*[@Stock\=\'out\'] | *[@Number>\=8 or @Number\=3]}">-->
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding XPath="Title"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
Az ebben a példában látható módon, ha ugyanazt a kötési deklarációt az attribútumszintaxisban szeretné létrehozni, a speciális karaktereket megfelelően kell feloldania. További információ: XML-karakterentitások és XAML-.
A ListBox a következő elemeket jeleníti meg a példa futtatásakor. Ezek a Címaz összes olyan elem közül, amely a Könyvek alatt található, ahol a Készlet értéke "ki" vagy a Szám értéke 3 vagy nagyobb, vagy egyenlő 8-cal. Figyelje meg, hogy nincsenek visszaadva CD és elemek, mert a XPath érték be van állítva a XmlDataProvider-en, jelezve, hogy csak a Könyvek elemek legyenek láthatók (lényegében egy szűrőt állít be).
Ebben a példában a könyvcímek azért jelennek meg, mert a XPath-ben a TextBlock kötés DataTemplate-ja "Cím" értékre van beállítva. Ha egy attribútum (például az ISBN) értékét szeretné megjeleníteni, akkor ezt a XPath értéket "@ISBN" értékre állítja.
A WPF XPath tulajdonságait az XmlNode.SelectNodes metódus kezeli. A XPath lekérdezéseket módosíthatja a különböző eredmények eléréséhez. Íme néhány példa az előző példából a XPath lekérdezésre a kötött ListBox-n.
XPath="Book[1]"visszaadja az első könyv elemet ("XML in Action"). Vegye figyelembe, hogy XPath indexek 1-en alapulnak, nem 0-n.XPath="Book[@*]"visszaad minden könyvelemet, amely bármilyen attribútummal rendelkezik.XPath="Book[last()-1]"a második és az utolsó könyvelemet adja vissza ("A Microsoft .NET bemutatása").XPath="*[position()>3]"az összes könyvelemet visszaadja, kivéve az első hármat.
Ha egy XPath- lekérdezést futtat, az XmlNode vagy XmlNodes-listát ad vissza. XmlNode egy közös nyelvi futtatókörnyezeti (CLR) objektum, ami azt jelenti, hogy a Path tulajdonsággal kapcsolódhat a közös nyelvi futtatókörnyezet (CLR) tulajdonságaihoz. Vegyük újra az előző példát. Ha a példa többi része változatlan marad, és a TextBlock kötést a következőre módosítja, a visszaadott XML-csomópontok neve megjelenik a ListBox-ben. Ebben az esetben az összes visszaadott csomópont neve "Book".
<TextBlock FontSize="12" Foreground="Red">
<TextBlock.Text>
<Binding Path="Name"/>
</TextBlock.Text>
</TextBlock>
Egyes alkalmazásokban az XML adatszigetként való beágyazása az XAML-oldal forrásán belül kényelmetlen lehet, mert az adatok pontos tartalmát fordításkor ismerni kell. Ezért az adatok külső XML-fájlból való lekérése is támogatott, ahogyan az alábbi példában is látható:
<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>
Ha az XML-adatok egy távoli XML-fájlban találhatók, az adatokhoz való hozzáférést úgy határozhatja meg, hogy egy megfelelő URL-címet rendel hozzá a Source attribútumhoz az alábbiak szerint:
<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>
Lásd még
.NET Desktop feedback