【问题标题】:Hierarchical-DataBinding in TreeViewTreeView 中的分层数据绑定
【发布时间】:2015-06-26 06:18:37
【问题描述】:

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

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&lt;ClassWithPupils&gt; 的 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>

所以类名显示正确。

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

我尝试了类似的方法:

<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 中将学生的姓名显示为班级的孩子?

【问题讨论】:

    标签: c# wpf treeview hierarchicaldatatemplate


    【解决方案1】:

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

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

    【讨论】:

    • 看起来不错。以及如何在父元素上显示类名?
    • 也许你可以打印你的树视图现在的样子,也许你可以指定更多的细节,你希望类的名称出现在哪里?
    • 很遗憾我无法打印屏幕。我的树现在有 2 个根节点,每个节点有 2 个子节点。孩子的名字显示正确,但根节点是空的
    • 好的。我解决了。在 HierarchicalDataTemplate 中,我添加了 HierarchicalDataTemplate.ItemTemplate,里面有一个绑定到瞳孔名称的标签
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多