绑定到WPF中的TreeView

时间:2010-03-24 14:00:55

标签: wpf data-binding treeview

我正在尝试将一些数据从类实例绑定到TreeView。我的代码如下:

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());
        }
    }
}

和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:loc="clr-namespace:WpfApplication1"
    Title="MainWindow" Height="287" Width="525">

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

我的TreeView中没有显示任何内容。我做错了什么?

我希望看到:

-Test
- 1
- 2
- 3

更新:生成名称和子项属性而不是公共字段 更新:添加了我期望在TreeView中看到的内容

3 个答案:

答案 0 :(得分:2)

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

将ItemSource绑定从“{Binding}”更改为“{Binding Children}”,并将HierarchicalDataTemplate更改为DataTemplate。

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

答案 1 :(得分:0)

您只能绑定到公共属性,而不能绑定到字段。将NameChildren更改为公共属性,这应该有效。

答案 2 :(得分:0)

这里试试这个:

   <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()。