.net - WPF TreeView 绑定(bind)

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

我有一个具有父属性和子属性的类。

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

我想在 WPF TreeView 中显示此层次结构。

这是我的 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 As New PageEntities
Dim t = From p In db.Page.Include("Children") _
        Where p.Parent Is Nothing _
        Select p
TreeViewPages.ItemsSource = t

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

最佳答案

这不起作用的原因是您仅为 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>

关于.net - WPF TreeView 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/272854/

相关文章:

方法参数的 c# 自定义属性 - 它是如何工作的?

c# - 你会为这个项目推荐什么?

c# - 如何使 GlyphTypeface FontUri 通用

c# - Linq 查询中的 Guid.ToString()?

c# - 最佳实践 : Pros and Cons for using AutoMapper or LINQ (LINQ to Objects) for mapping between a Domain Model and a Presentation Model

c# - 使用在 Generic 类中创建的 Func<string> 调用时 RuntimeHelpers.PrepareMethod 不起作用

c# - 7z格式压缩

c# - 运行时不显示图像 C# WPF

c# - 绑定(bind)数据模板控件属性

c# - 使用 linq 提供按日期存在的用户总数