在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构

这是项目中一个页面上的一个功能。我们需要在界面上通过一个TreeView控件显示一个递归的树状结构,也就是说会很多层嵌套的节点,而且层数是不确定的。
这个功能,可以通过HierarchicalDataTemplate来很方便地实现

1. 业务实体

作为举例,我定义了一个大家都很熟悉的Folder类型,即文件夹。我们都知道,文件夹又可以包含子文件夹,而且可以多层嵌套。所以,这是一个递归的结构体。
public class Folder { public string Name { get; set; } public ObservableCollection Folders { get; set; } }

2. 准备数据

我用下面的代码,模拟一个数据读取操作。下面是硬编码出来的数据。实际情况下,可以读取数据库。
void MainPage_Loaded(object sender, RoutedEventArgs e) { var result = new[]{ new Folder(){Name="Test",Folders =new ObservableCollection( new[]{ new Folder(){Name="Test4"}, new Folder(){Name="Test3"}, new Folder(){Name="Test4",Folders=new ObservableCollection( new []{new Folder(){Name ="Test5"}}) } })}}; tvFolders.ItemsSource = result; }

3. 绑定控件


请注意,我们这里用到一个特殊的DataTemplate:HierarchicalDataTemplate,并且将其设置为Treeview的ItemTemplate。

4. 查看效果

image在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
Tags: 

延伸阅读

最新评论

发表评论