[英]How to retrieve values from XML to C# wpf listview
我有一个这样的 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>
如何检索所有技能DBID 值和级别值并相应地在列表视图中显示它们,这意味着技能DBID 值将位于标签列而级别值将位于值列?
我建议您将您的 xml 文件转换为 C#(如字典)中的对象,然后将您的对象与 xaml 绑定。
要访问 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;
截屏
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.