2010-12-02 64 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