2010-09-08 2 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 в шаблоне. Я думаю, что это будет DataTemplate в классе ClassA, но что-то не нажимает.

Любая помощь очень ценится.

Спасибо!

ответ

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 Я открыт для просмотра этого кода и улучшения этого.