2015-06-21 38 views
-1

我有一个这样的XML:如何检索XML值C#WPF的ListView

<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> 

而且为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> 

我怎样才能检索到所有skillDBID值和级别值,并相应地在列表视图中显示它们,这意味着skillDBID值将位于标签列,而级别值将位于值列?

+1

你研究这在所有的XMLDataProvider?有数百个例子... –

回答

0

我建议你,将你的xml文件转换为C#中的对象(Like Dictionary),然后用xaml绑定你的对象。

0

要访问XAML文件中的属性,您需要使用@符号。

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> 

在代码中设置

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

+0

嗨@Walt Ritscher,感谢您的解决方案。我可以知道如何将XmlDataProvider源代码从代码传递给.xaml?因为我通过代码中的特定过程来获取我的xml。 – YWah

+0

我添加了一个在代码中设置XmlDataProvider.Document属性的示例。 –