【问题标题】:How to retrieve values from XML to C# wpf listview如何从 XML 检索值到 C# wpf listview
【发布时间】:2015-06-21 12:53:40
【问题描述】:

我有一个这样的 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 值和 level 值并将它们相应地显示在列表视图中,这意味着 SkillDBID 值将在 Label 列,level 值将在 Value 列?

【问题讨论】:

  • 你研究过这个吗?有数百个例子......

标签: c# xml wpf xaml listview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要访问 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;
    

    截图

    【讨论】:

    • 嗨@Walt Ritscher,感谢您的解决方案。我可以知道如何将 XmlDataProvider 源代码从代码传递到 .xaml 吗?因为我通过代码中的某些过程得到了我的xml。
    • 我添加了在代码中设置 XmlDataProvider.Document 属性的示例。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2016-12-18
    • 2018-12-26
    • 2011-06-16
    • 2018-02-15
    • 2013-05-22
    • 2011-11-21
    相关资源
    最近更新 更多