直接在xaml定義時xml時應該注意的!
xml資料
<?xml version="1.0" encoding="utf-8"?>
<StringList >
<Srtring Id="1">
<Name>A</Name>
<Age>10</Age>
<Nub>001</Nub>
</Srtring>
<Srtring Id="2">
<Name>B</Name>
<Age>20</Age>
<Nub>002</Nub>
</Srtring>
<Srtring Id="3">
<Name>C</Name>
<Age>30</Age>
<Nub>003</Nub>
</Srtring>
<Srtring Id="4">
<Name>D</Name>
<Age>40</Age>
<Nub>004</Nub>
</Srtring>
<Srtring Id="5">
<Name>A</Name>
<Age>50</Age>
<Nub>005</Nub>
</Srtring>
</StringList>
如果直接在Xaml頁面中定義則是:
使用XmlDataProvider,并設定key,以及Xpath的源,xpath則是xml在被綁定時起始資料的起點,但不包括自身(不設定也可以,但是需要在設定綁定時設定)
也就是xpath設定為StringList,綁定時的起點則是String
且注意的是:XAML頁面中不可以包含<?xml version="1.0" ?>字樣,會報錯。還有需要在xml根部加上xmlns=""
例子:
<Window.Resources>
<XmlDataProvider x:Key="xmlData" >
<x:XData>
<StringList xmlns="">
<String Id="1">
<Name>A</Name>
<Age>10</Age>
<Nub>001</Nub>
</String>
<String Id="2">
<Name>B</Name>
<Age>20</Age>
<Nub>002</Nub>
</String>
<String Id="3">
<Name>C</Name>
<Age>30</Age>
<Nub>003</Nub>
</String>
<String Id="4">
<Name>D</Name>
<Age>40</Age>
<Nub>004</Nub>
</String>
<String Id="5">
<Name>A</Name>
<Age>50</Age>
<Nub>005</Nub>
</String>
</StringList>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Source={StaticResource xmlData},XPath=StringList/*}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="60" DisplayMemberBinding="{Binding XPath=Name}" />
<GridViewColumn Header="Age" Width="60" DisplayMemberBinding="{Binding XPath=Age}" />
<GridViewColumn Header="Nub" Width="60" DisplayMemberBinding="{Binding XPath=Nub}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
如果想要擷取屬性則是需要使用@,并且確定xpath路徑正确
例如
<ListView ItemsSource="{Binding Source={StaticResource xmlData},XPath=/StringList/*}">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=@Id}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=Age}" />
<GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding XPath=Nub}" />
</GridView>
</ListView.View>
</ListView>
截圖
