如何使用{Binding Path = /}直接显示第三级嵌套集合?

时间:2011-02-09 13:34:42

标签: wpf binding

我有一个非常嵌套的实体结构:

DataObject>大学(列表)>大学(名单)>学生(名单)>项目(清单)

我想直接将TreeView与我的DataObject绑定为:

myTreeView.ItemSource = DataObject.Universities;

        DataTemplate dataTemplate = new DataTemplate();
        dataTemplate.DataType = typeof(Student);
        FrameworkElementFactory spFactoryDeliverable = new FrameworkElementFactory(typeof(TextBlock));
        spFactoryDeliverable.Name = "spFactoryDeliverable";
        spFactoryDeliverable.SetBinding(TextBlock.TextProperty, new Binding("Colleges/Students/Name"));
        dataTemplate.VisualTree = spFactoryDeliverable;
        rdTreeDeliverables.ItemTemplate = dataTemplate;

显示具有学生姓名的节点。但问题是 - 它只会显示单个学院学生姓名的名称。它不会显示第二个或任何进一步的大学记录的记录。

有任何建议/想法吗?

2 个答案:

答案 0 :(得分:2)

{Binding Path = /}显示列表中的当前项,它不以任何方式迭代列表 - 如果要显示嵌套列表,则需要某种类型的嵌套数据模板(HierarchicalDataTemplate或带有ItemsControl的DataTemplate - 取决于此模板将与之一起使用的控件)。

如果要使用不能与层次结构一起使用的控件,您还应该考虑在绑定之前“压扁”代码中的列表。

答案 1 :(得分:1)

不要在代码后面创建模板,这是一个很大的痛苦,容易出错。请提供实施课程的代码。

你的模板在任何方面都不是树状的(你的来源是)所以这根本不会做,你需要为所有级别定义嵌套模板或者使模板递归。

我认为你也不能直接跳到深层次。这是一个相当复杂的指令,需要将所有子集合累积为一个。

{Binding Path=/}会返回当前项目,因此如果您想要一所大学的所有名称,您需要使用路径Colleges/Students来返回当前大学的学生集合。如果您需要所有大学中可能需要嵌套的所有学生的姓名。