2014-01-09 72 views
0

使用下面的XML我想使用帶有WPF樹視圖的hierarchicaldatatemplate。根據價值具有綁定的XML DataSource問題的分層數據模板

我打算使用一個不同的圖片,名稱旁邊,然後從ID標籤的得到名字。

<key type='Configuration'> 
     <id field='name' value='Some value'/> 
    </key> 
    <key type='Container'> 
     <id field='name' value='MyName'/> 
     <key type='Container'> 
      <id field='name' value='Data12345'/> 
      <key type='Container'> 
       <id field='name' value='Data987655'/> 
       <key type='Circuit'> 
        <id field='name' value='Data63236723'/> 
       </key> 
      </key> 
     </key> 
    </key> 

我曾嘗試一些簡單的例子,但他們沒有說明如何使用屬性使用hierarchicaldatatemplate以及如何在與從屬性結合得到的文本。

如果有人能夠展示hierarchicaldatatemplate應該如何看起來像這個XML與TreeView一起使用,那將是非常棒的。

回答

2

起初,我認爲你不能滿足那些XML模式的要求。然而,想出來的一個測試項目後,似乎這一切工作得很好:

enter image description here

你需要使用一個XmlDataProvider訪問XML文件:

<XmlDataProvider Source="/WpfApplication2;component/Xml/TestXMLFile.xml" 
    XPath="root/key" /> 

您還需要爲root節點添加到XML,使其合法:

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <key type='Configuration'> 
     <id field='name' value='Some value'/> 
    </key> 
    <key type='Container'> 
     <id field='name' value='MyName'/> 
     <key type='Container'> 
      <id field='name' value='Data12345'/> 
      <key type='Container'> 
       <id field='name' value='Data987655'/> 
       <key type='Circuit'> 
        <id field='name' value='Data63236723'/> 
       </key> 
      </key> 
     </key> 
    </key> 
</root> 

然後你需要添加TreeView

<TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" /> 

然後終於,添加HierarchicalDataTemplate到您的Resources部分:

<HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=key}" DataType="key"> 
    <StackPanel Orientation="Horizontal" Margin="0,2"> 
     <Image> 
      <Image.Style> 
       <Style> 
        <Setter Property="Image.Source" Value="Images/Default.png" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding [email protected]}" Value="Container"> 
          <Setter Property="Image.Source" Value="Images/Container.png" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding [email protected]}" Value="Configuration"> 
          <Setter Property="Image.Source" Value="Images/Configuration.png" /> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding [email protected]}" Value="Circuit"> 
          <Setter Property="Image.Source" Value="Images/Circuit.png" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
     <TextBlock Text="{Binding XPath=id/@value}" Margin="5,0" /> 
    </StackPanel> 
</HierarchicalDataTemplate> 

我真的不意味着做整個事情給你,所以我將離開你來調整它符合你的喜好。我相信你會從這裏繼續。

+0

感謝您提供非常精緻的答案,我不知道非常整齊的風格觸發器! 「綁定XPath = id/@值」真的解決了我的問題! – StefanE