Вложенный TreeView с дополнительными свойствами - PullRequest
3 голосов
/ 08 сентября 2010

Эта проблема была решена ранее, но я просто не получаю ее с примерами, которые я нахожу в Интернете.

У меня есть класс, скажем, «ClassA», этот класс имеет 2 строковых свойства,«Property1» и «Property2», а также IEnumerable, где «ClassB» также имеет 2 свойства.Список ClassB будет отображаться во вложенном древовидном представлении

Я хочу, чтобы они отображались в древовидном представлении следующим образом:

-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 Ответ

1 голос
/ 08 сентября 2010

Ну, я ответил на свой вопрос, но я не думаю, что это правильный путь.

Я использовал шаблон элемента на виде дерева, а затем создал другой вид дерева внутри этого шаблона с другим шаблоном элемента на нем.

Однако я могу понять это, когда смотрю на него, а не на иерархические шаблоны данных.

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

...