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

时间:2015-06-21 12:53:40

标签: c# xml wpf xaml 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>

如何检索所有skillDBID值和级别值并相应地在列表视图中显示它们,这意味着skillDBID值将位于Label列,级别值将位于Value列?

2 个答案:

答案 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;

<强>截图

enter image description here