Set TreeView HierarchicalDataTemplate with 2 level

2019-07-04 05:52发布

问题:

I have a View Model that is represented in the DataContext of the window.

public class SchoolViewModel:ViewModelBase
{
      public ObservableCollection<SchoolClassGroup> ClassesCollection { get; set; }
            ....             
} 


public class SchooleClassGroup:ViewModelBase
{
     public string ClassName {get;set;}
     public string TeacherName {get;set;}
     public ObservableCollection<Students> StudentCollection{ get; set; }

}

public class Student
{
     public string Name {get;set;}
     public int Age {get;set;}
     public DateTime BirthDate {get;set;}
     ...
} 

I want to represent a TreeView that will show me schools,class and students.

How can I do it?

Thanks!

回答1:

You need to create HeirarchicalDataTemplates for each level of your object tree that has a Parent-Child relationship, plus a simple DataTemplate for the leaf node.

Your object tree should be School -> Class -> Student

class School has a

List<Class>

class Class has a

List<Student>

Then it's simple

<Window.Resources>

        <HierarchicalDataTemplate ItemsSource="{Binding Classes}" DataType="{x:Type School}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>

        <HierarchicalDataTemplate ItemsSource="{Binding Students}" DataType="{x:Type Class}">
            <TextBlock Text="{Binding Name}" />
        </HierarchicalDataTemplate>

        <DataTemplate DataType="{x:Type Student}">
            <TextBlock Text="{Binding Name}" />
        </DataTemplate >

    </Window.Resources>

    <Grid>
        <TreeView ItemsSource="{Binding Schools}" >
    </Grid>