TreeView中的分层数据绑定

时间:2015-06-26 06:18:38

标签: c# wpf treeview hierarchicaldatatemplate

我有一个名为sz的课程,如下所示:

SELECT .... FROM FLATTEN(FLATTEN(GA_SESSION,customDimensions),hits.customDimensions)

我有一个包含ClassWithPupils的ViewModel。

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>中显示ClassesWithPupils层次结构中的所有项目。

我的观点到目前为止看起来像:

private ObservableCollection<ClassWithPupils> classesWithPupils;

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

所以Class-Names显示正确。

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

我尝试过类似的事情:

TreeView

没有成功......

所以我的问题是:如何在TreeView中将类的名称显示为类的子项?

1 个答案:

答案 0 :(得分:1)

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

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