2015-06-21 41 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屬性的示例。 –