简体   繁体   中英

How to retrieve values from XML to C# wpf listview

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.

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