我有一个具有父属性和子属性的类。
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/