2010-09-08 94 views
3

此問題已解決,但我只是沒有得到它與我在網上找到的示例。具有附加屬性的嵌套TreeView

我有一個類,可以說'ClassA',這個類有2個字符串屬性,'Property1'和'Property2'以及IEnumerable'ClassB'也有2個屬性。 ClassB的名單都將顯示在一個嵌套的樹狀

我想這顯示在一個TreeView像這樣:

 
-ClassA[0] 
    ClassA.Property1 
    ClassA.Property2 
    -ClassA.ClassB Title 
    ClassB[0] 
    ClassB[1] 
    Etc. 
+ClassA[1] 
+ClassB[2] 

這是我的理解是這樣做到這一點然而,使用HierarchicalDataTemplates所有示例我只能找到告訴我該怎麼做:

 
-ClassA[0] 
    -ClassA.ClassB Title 
    ClassB[0] 
    ClassB[1] 
    Etc. 
+ClassA[1] 
+ClassB[2] 

我無法弄清楚如何讓模板ClassA的屬性。我認爲這將是類型ClassA的DataTemplate,但不點擊。

任何幫助,非常感謝。

謝謝!

回答

1

嗯,我回答了我自己的問題,但我不認爲這是正確的方式去做這件事。

我在樹形視圖上使用了一個itemtemplate,然後在該模板中創建了另一個樹視圖,並在其上添加了另一個itemtemplate。

但是,我可以理解這一點,當我看着它看着HierarchicalDataTemplates。

WPF:

<TreeView HorizontalAlignment="Left" Name="treeView1" VerticalAlignment="Top"> 
     <TreeView.ItemTemplate> 
      <DataTemplate> 
       <TreeViewItem Header="{Binding FileName}"> 
        <TextBlock Text="{Binding MetaData1}"/> 
        <TextBlock Text="{Binding MetaData2}"/> 
        <TreeViewItem ItemsSource="{Binding Mappings}" Header="Mappings"> 
         <TreeViewItem.ItemTemplate> 
          <DataTemplate> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="*"/> 
             <ColumnDefinition Width="17"/> 
             <ColumnDefinition Width="*"/> 
            </Grid.ColumnDefinitions> 
            <TextBlock Text="{Binding Original}" Grid.Column="0"/> 
            <TextBlock Text="->" Grid.Column="1" Margin="3,0,3,0"/> 
            <TextBlock Text="{Binding Mapping}" Grid.Column="2"/> 
           </Grid> 
          </DataTemplate> 
         </TreeViewItem.ItemTemplate> 
        </TreeViewItem> 
       </TreeViewItem> 
      </DataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 

類:

public class ClassA 
{ 
    public string MetaData1 { get; set; } 
    public string MetaData2 { get; set; } 
    public string FileName { get; set; } 
    public List<ClassB> Mappings { get; set; } 
} 

public class ClassB 
{ 
    public string Original { get; set; } 
    public string Mapping { get; set; } 
} 

快捷我的數據結構的實現:

new List<ClassA> 
        { 
         new ClassA 
          { 
           FileName = "ClassA 1", 
           MetaData1 = "Prop 1", 
           MetaData2 = "Prop 2", 
           Mappings = new List<ClassB> 
              { 
               new ClassB 
               { 
                Original = "BProp 1", 
                Mapping = "BProp 2" 
               } 
              } 
          }, 
         new ClassA 
          { 
           FileName = "ClassA 2", 
           MetaData1 = "Prop 1", 
           MetaData2 = "Prop 2", 
           Mappings = new List<ClassB> 
              { 
               new ClassB 
               { 
                Original = "BProp 1", 
                Mapping = "BProp 2" 
               } 
              } 
          } 
        }; 

如果有誰知道我應該怎麼做了這更好的(與HierachicalDataTemplates和DataTemplates我可以看到該代碼並對此進行改進。