简体   繁体   English

如何从 XML 检索值到 C# wpf listview

[英]How to retrieve values from XML to C# wpf listview

I've an XML like this:我有一个这样的 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>

And my .xaml code for the listview:我的列表视图的 .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>

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?如何检索所有技能DBID 值和级别值并相应地在列表视图中显示它们,这意味着技能DBID 值将位于标签列而级别值将位于值列?

我建议您将您的 xml 文件转换为 C#(如字典)中的对象,然后将您的对象与 xaml 绑定。

To access an attribute in the XAML file, you need to use the @ symbol.要访问 XAML 文件中的属性,您需要使用 @ 符号。

XPath=skillDBID/@value

This XAML works with your example XML file.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>

Set the XMLDataProvider in code在代码中设置 XMLDataProvider

 var provider = new XmlDataProvider();
 var xmlFile = new XmlDocument();
 xmlFile.Load(@"..\..\yourdoc.xml");
 provider.Document = xmlFile;
 provider.XPath = "/ConfData";

 AInfoLv.DataContext = provider;

Screenshot截屏

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM