2010-03-24 134 views
1

我试图从一个类实例绑定一些数据到一个TreeView。我的代码如下:在WPF中绑定到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> 

没有在我的树视图显示出来。我究竟做错了什么?

我希望看到:

- 测试
- 1
- 2
- 3

更新:使名儿童属性,而不是公共领域。
已更新:添加了我期望在TreeView中看到的内容

回答

2

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

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

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

+0

在这种情况下,我将如何让Parent.Name显示为顶级节点? 这是我希望看到的: - 测试 --1 --2 --3 --4 等 – KrisTrip 2010-03-24 15:48:47

+0

创建类型家长的名单,并添加MyClass的给它。然后,将datacontext设置为列表而不是对象。 – apandit 2010-03-24 15:54:11

0

您只能绑定到公共属性,而不能绑定到字段。更改NameChildren是公共财产,这应该工作。

+0

作出此更新(显示在原始问题),没有任何更改。 TreeView仍然是空的。 – KrisTrip 2010-03-24 15:36:02

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()对当前项目。