.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/

相关文章:

.net - 使用加密连接字符串配置 ELMAH 和 SQL Server 日志记录

.net - 如何获取 Azure Cosmos DB 数据库/容器大小?

c# - WPF:在代码隐藏中获取控件绑定(bind)到的属性

c# - Distinct 不使用 LINQ to Objects

c# - 带有表达式树的 Linq SubSelect

c# - Linq - 每个组的最高值

c# - 如何在 Entity Framework 中使用事务?

c# - 在 C# 中,事件重定向是一种好的做法吗?如果属实,那么 'sender' 应该是谁?

wpf - Visual Studio 2012 - 性能分析 Prism 应用程序

WPF:简单的文本框数据绑定(bind)