I've an XML like this:
<ConfData>
<Person>
<AgentInfo>
<skillLevels>
<SkillLevel>
<skillDBID value="101" />
<level value="10" />
</SkillLevel>
<SkillLevel>
<skillDBID value="103" />
<level value="10" />
</SkillLevel>
<SkillLevel>
<skillDBID value="106" />
<level value="10" />
</SkillLevel>
<SkillLevel>
<skillDBID value="110" />
<level value="10" />
</SkillLevel>
<SkillLevel>
<skillDBID value="111" />
<level value="10" />
</SkillLevel>
<SkillLevel>
<skillDBID value="112" />
<level value="10" />
</SkillLevel>
<CfgSkillLevel>
<skillDBID value="113" />
<level value="0" />
</CfgSkillLevel>
</skillLevels>
</AgentInfo>
</Person>
</ConfData>
And my .xaml code for the listview:
<ListView x:Name="AInfoLv">
<ListView.View>
<GridView>
<GridViewColumn x:Name="LabelColumn" Header="Label" Width="100" DisplayMemberBinding="{Binding Path=Label}"/>
<GridViewColumn x:Name="ValueColumn" Header="Value" Width="130" DisplayMemberBinding="{Binding Path=Value}"/>
</GridView>
</ListView.View>
</ListView>
How can I retrieve all skillDBID values and level values and display them at the listview accordingly, which means the skillDBID values will be at Label column and level values will be at Value column?
我建议您将您的 xml 文件转换为 C#(如字典)中的对象,然后将您的对象与 xaml 绑定。
To access an attribute in the XAML file, you need to use the @ symbol.
XPath=skillDBID/@value
This XAML works with your example XML file.
<Window.Resources>
<XmlDataProvider Source='ConfData.xml'
x:Key='ConfXmlSource'
XPath="ConfData" />
</Window.Resources>
<Grid DataContext='{Binding Source={StaticResource ConfXmlSource}}'>
<ListView x:Name="AInfoLv"
Grid.ColumnSpan='1'
ItemsSource='{Binding XPath=/ConfData/Person/AgentInfo/skillLevels/SkillLevel}'>
<ListView.View>
<GridView>
<GridViewColumn x:Name="LabelColumn"
Header="Label"
Width="100"
DisplayMemberBinding="{Binding XPath=skillDBID/@value}" />
<GridViewColumn x:Name="ValueColumn"
Header="Value"
Width="130"
DisplayMemberBinding="{Binding XPath=level/@value}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
Set the XMLDataProvider in code
var provider = new XmlDataProvider();
var xmlFile = new XmlDocument();
xmlFile.Load(@"..\..\yourdoc.xml");
provider.Document = xmlFile;
provider.XPath = "/ConfData";
AInfoLv.DataContext = provider;
Screenshot
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.