【问题标题】:WPF TreeView Binding [duplicate]WPF TreeView绑定[重复]
【发布时间】:2008-11-07 17:28:23
【问题描述】:

我有一个具有 Parent 和 Children 属性的类。

ADO.NET Entity Framework Hierarchical Page Class http://img148.imageshack.us/img148/6802/edmxxe8.gif

我想在 WPF 树视图中显示此层次结构。

这是我的 XAML...

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

还有我的 VB 代码...

Dim db 作为新的 PageEntities Dim t = From p In db.Page.Include("Children") _ p.Parent 什么都不是 _ 选择 p TreeViewPages.ItemsSource = t

但是我只得到一棵两层深的树。我需要做些什么才能使其正常工作?

【问题讨论】:

标签: .net wpf linq entity-framework data-binding


【解决方案1】:

这不起作用的原因是您只为 TreeView 指定了 DataTemplate。由于它生成的 TreeViewItems 也是 ItemsControls,因此它们也需要设置 ItemTemplate。

实现您所希望的最简单方法是将 HierarchicalDataTemplate 放入 TreeView(或其任何父视觉对象)的资源中,并设置 HierarchicalDataTemplate 的 DataType 以便将其应用于您的所有项目。

在容器的声明(很可能是窗口)中,您需要定义到定义页面的命名空间的映射。

例如

<Window ...
    xmlns:local="clr-namespace:NamespaceOfPageClass;assembly=AssemblyWherePageIsDefined">

<TreeView Margin="12" Name="TreeViewPages" ItemsSource="{Binding}" />
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType=”{x:Type local:Page}” ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Path=ShortTitle}" />
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

【讨论】:

  • DataType="{x:Type local:Page}" 给出错误:(1)“找不到类型‘页面’。” (2) “'local' 是一个未声明的命名空间。”
  • 对不起,我已经更新了答案以澄清您需要添加一个 xmlns 声明来指定在哪里可以找到 Page 类。
  • 谢谢。我添加了 xmlns:local="clr-namespace:PageManager" 它现在正在模板树上的节点。但我仍然只能得到两层深的树。
  • 这应该可以工作... Children 集合中的对象是否相同类型?另外,您确定您的子对象填充了它们的子对象吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2011-09-12
  • 2011-04-01
  • 2011-01-31
  • 1970-01-01
相关资源
最近更新 更多