在WPF中绑定到TreeView

在WPF中绑定到TreeView,wpf,data-binding,treeview,Wpf,Data Binding,Treeview,我试图将一些数据从类实例绑定到树视图。我的代码如下: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Parent myClass = new Parent(); this.DataContext = myClass; } } public class Parent {

我试图将一些数据从类实例绑定到树视图。我的代码如下:

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

        Parent myClass = new Parent();
        this.DataContext = myClass;
    }
}

public class Parent
{
    private List<string> children = new List<string>;

    public string Name {get;set;}
    public List<string> Children 
    {
        get { return this.children; } 
        set { this.children=value; }
    }

    public Parent()
    {
        this.Name = "Test";

        for (int i = 1; i <= 10; i++)
        {
            Children.Add(i.ToString());
        }
    }
}
公共部分类主窗口:窗口
{        
公共主窗口()
{
初始化组件();
父myClass=新父级();
this.DataContext=myClass;
}
}
公共类父类
{
私有列表子项=新列表;
公共字符串名称{get;set;}
公开儿童名单
{
获取{返回this.children;}
设置{this.children=value;}
}
公共家长()
{
this.Name=“Test”;

对于(int i=1;i您只能绑定到公共属性,而不能绑定到字段。将
Name
Children
更改为公共属性,这应该会起作用。

您将父类型的“myClass”绑定到datacontext,并对ItemSource使用相同的对象。这不会起作用,因为父类型不是可枚举类型

将ItemSource绑定从“{binding}”更改为“{binding Children}”,并将HierarchycalDataTemplate更改为一个DataTemplate

如果要将myClass保留为顶级节点,还可以将myClass包装在IEnumerable中,并将其设置为数据上下文。

请尝试以下操作:

   <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Name}"/>
        <TreeView Name="TreeView" ItemsSource="{Binding Children}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </StackPanel>

有几件事:

  • Name
    ”属性超出范围
  • 我们需要绑定
    TreeView
    以及
    DataTemplate
  • 我们使用默认的
    {Binding}
    调用 当前项上的ToString()

进行了此更新(如原始问题中所示),但没有任何更改。TreeView仍然为空。在这种情况下,如何将Parent.Name显示为顶级节点?这是我想看到的:-Test--1--2--3--4 etc创建Parent类型的列表并将myclass添加到其中。然后,将datacontext设置为列表而不是对象。
   <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch">
        <TextBlock Text="{Binding Name}"/>
        <TreeView Name="TreeView" ItemsSource="{Binding Children}">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                    <TextBlock Text="{Binding}"/>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>
    </StackPanel>