TreeView,HierarchicalDataTemplate和递归数据

对于我的treeview,我有两个提供ItemsSource的不同类。

public class TreeViewModel : ViewModelBase { public ObservableCollection Items { get; set; } } public class NodeViewModel : ViewModelBase { public string Id { get; set; } public string Name { get; set; } public ObservableCollection Children { get; set; } } 

现在我希望我的TreeView在TreeViewModel中显示Items并显示NodeViewModel提供的分层数据。

这是我的XAML

               

试图提供Items作为TreeViewItemsSource 。 如果显示任何内容,它不会按层次结构显示数据。

我也尝试使用ItemTemplate而不是TreeView.Resources

怎么了?

也许问题是第一个TextBlock Text Binding ? 我想在那里的Items显示NodeViewModelName属性。

正如@ sa_ddam213所说,你只需要NodeViewModelHierarchicalDataTemplate ,但你的代码唯一的问题是数据模板定义中DataType="x:Type local:TreeViewModel"缺少大括号( {} )(它应该是DataType="{x:Type local:TreeViewModel}" )。 添加括号和ItemsSource绑定解决了这个问题:

不使用TreeViewModel的附加HierarchicalDataTemplate ,但它不会造成伤害。

您只需要为NodeViewModel声明HierarchicalDataTemplate ,因为这是TreeView唯一显示的内容,并将实际的ItemSource绑定到TreeView

        

完整的例子

XAML:

          

码:

 public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public TreeViewModel TreeModel { get { return new TreeViewModel { Items = new ObservableCollection{ new NodeViewModel { Name = "Root", Children = new ObservableCollection { new NodeViewModel { Name = "Level1" , Children = new ObservableCollection{ new NodeViewModel{ Name = "Level2"}}} } }} }; } } } public class TreeViewModel { public ObservableCollection Items { get; set; } } public class NodeViewModel { public string Id { get; set; } public string Name { get; set; } public ObservableCollection Children { get; set; } } 

结果:

在此处输入图像描述