2010-12-02 61 views
0

我有我想要使用填充在Silverlight一個TreeView節點類:TreeView控件只加載頂級節點

class TreeNode { 
    public string Caption {get; set;}; 
    public IEnumerable<TreeNode> Children{get; set;} 

} 

我的XAML如下:

<controls:TreeView VerticalAlignment="Stretch" 
          x:Name="trv" 
          Height="150" > 
      <controls:TreeView.ItemTemplate> 
       <common:HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" > 
        <TextBlock Text="{Binding Path=Caption}" /> 
       </common:HierarchicalDataTemplate> 
      </controls:TreeView.ItemTemplate> 
     </controls:TreeView> 

然而,只有第一層元素加載。如果我將TextBlock替換爲HerarchicalDataTemplate,基本上對我的數據深度進行硬編碼,則會顯示第二層元素。然而,第三層則不是。

任何想法?

回答

1

我剛剛試過這個,你必須在數據綁定部分做錯了什麼,因爲一切都按預期工作。我用下面的XAML創建了一個簡單的例子。

輸出:

alt text

XAML:

<controls:TreeView VerticalAlignment="Stretch" 
        x:Name="trv" 
        Height="150" > 
    <controls:TreeView.ItemTemplate> 
     <controls:HierarchicalDataTemplate ItemsSource="{Binding Path=Children}" > 
      <TextBlock Text="{Binding Path=Caption}" /> 
     </controls:HierarchicalDataTemplate> 
    </controls:TreeView.ItemTemplate> 
</controls:TreeView> 

代碼:

TreeNode myNode = new TreeNode() { Caption = "Parent" }; 
    List<TreeNode> myChildren = new List<TreeNode>(); 

    myChildren.Add(new TreeNode() { Caption = "First Child" }); 
    myChildren.Add(new TreeNode() { Caption = "Second Child", Children = new List<TreeNode>() { new TreeNode() { Caption = "Child on 3rd Level" } } }); 


    myNode.Children = myChildren; 
    trv.ItemsSource = new List<TreeNode>() { myNode }; 
+0

懶加載葉節點,這是搞砸了一點。切換到一次加載所有節點,並且事情工作正常。 – 2010-12-03 14:25:34