2010-03-24 159 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()對當前項目。