HierarchicalDataTemplate不显示任何子项 - 为什么不呢?

时间:2012-03-17 14:30:11

标签: wpf hierarchicaldatatemplate

我正在尝试绝对最简单地使用HierarchicalDataTemplate将嵌套数据绑定到WPF TreeView。出于某种原因,我的树的孩子看不见:

enter image description here

这是整个XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:src="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <TreeView Name="ctTree">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType = "{x:Type src:MyClass}"
                                      ItemsSource = "{Binding Path=Children}">
                <TextBlock Text="{Binding Path=Name}"/>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>
</Window>

除了使用和命名空间之外,这里还有C#的所有内容:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var collection = new ObservableCollection<MyClass>
        {
            new MyClass { Name = "parent one" },
            new MyClass { Name = "parent two" },
        };
        collection[0].Children.Add(new MyClass { Name = "child one" });
        collection[0].Children.Add(new MyClass { Name = "child two" });
        ctTree.ItemsSource = collection;
    }
}

class MyClass
{
    public string Name { get; set; }
    public ObservableCollection<MyClass> Children
        = new ObservableCollection<MyClass>();
}

请注意,数据模板确实适用于项目:数据来自Name属性,如果模板未应用,则显示为“MyClass”。

我如何让孩子们去表演?我似乎与HierarchicalDataTemplate上的所有示例完全一样。

2 个答案:

答案 0 :(得分:6)

MyClass.Children是一个字段,而不是属性。您无法绑定到某个字段,将Children字段转换为属性,然后一切都应该有效:

class MyClass
{
    public string Name { get; set; }
    public ObservableCollection<MyClass> Children { get; private set; }

    public MyClass()
    {
        Children = new ObservableCollection<MyClass>();
    }
}

答案 1 :(得分:-1)

我认为Treeview.Resources是错误的。您想将模板放在Treeview.ItemTemplate。