繁体   English   中英

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

[英]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.

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