Hierarchical-DataBinding 在 TreeView 中

Hierarchical-DataBinding in TreeView

我有一个名为 ClassWithPupils 的 class,看起来像:

public class ClassWithPupils : ViewModelBase
    {
        public ClassWithPupils(IClass @class)
        {
            Class = @class;
            Pupils = new ObservableCollection<IPupil>();
        }


        public IClass Class
        {
            get { return Get<IClass>(); }
            set { Set(value); }
        }

        public ObservableCollection<IPupil> Pupils
        {
            get { return Get<ObservableCollection<IPupil>>(); }
            set { Set(value); }
        }
    }

我有一个包含 ObservableCollection<ClassWithPupils> 的 ViewModel。

private ObservableCollection<ClassWithPupils> classesWithPupils;

public ObservableCollection<ClassWithPupils> ClassesWithPupils
{
    get { return classesWithPupils ?? (classesWithPupils = new ObservableCollection<ClassWithPupils>()); }
}

此集合中正确填充了数据库中的项目。

现在我想在 TreeView 中显示 ClassesWithPupils 中的所有项目。

目前我的视图如下所示:

<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding}">
            <Label Content="{Binding Class.Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

所以 Class-Names 显示正确。

不幸的是,我不知道如何将每个 ClassWithPupils-Entry 的 Pupils-Collection 绑定到 TreeView 中的正确项目,如 children。

我试过类似的东西:

<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding}">
            <Label Content="{Binding Class.Name}"/>
            <HierarchicalDataTemplate.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
                    <Label Content="{Binding Name}"/>
                </HierarchicalDataTemplate>
            </HierarchicalDataTemplate.ItemTemplate>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

没有成功...

所以我的问题是:如何在 TreeView 中将学生的姓名显示为 class 中的 children?

查看您的代码后,我发现绑定中只有一个错误,这可能会导致所描述的问题,您应该像这样在分层模板中绑定到 Pupils:

<TreeView ItemsSource="{Binding ClassesWithPupils, UpdateSourceTrigger=PropertyChanged}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Pupils}">
            <Label Content="{Binding Class.Name}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>