我有这样的XML:
<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>
我的列表视图的.xaml代码:
<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>
如何检索所有skillDBID值和级别值并相应地在列表视图中显示它们,这意味着skillDBID值将位于Label列,级别值将位于Value列?
答案 0 :(得分:0)
我建议您将xml文件转换为C#中的对象(如字典),然后将对象与xaml绑定。
答案 1 :(得分:0)
要访问XAML文件中的属性,您需要使用@符号。
XPath=skillDBID/@value
此 XAML 适用于您的示例XML文件。
<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>
在代码中设置XMLDataProvider
var provider = new XmlDataProvider();
var xmlFile = new XmlDocument();
xmlFile.Load(@"..\..\yourdoc.xml");
provider.Document = xmlFile;
provider.XPath = "/ConfData";
AInfoLv.DataContext = provider;
<强>截图强>