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

简介: 转自http://www.cnblogs.com/chenxizhang/archive/2011/06/22/2087692.html 这是项目中一个页面上的一个功能。我们需要在界面上通过一个TreeView控件显示一个递归的树状结构,也就是说会很多层嵌套的节点,而且层数是不确定的。

转自http://www.cnblogs.com/chenxizhang/archive/2011/06/22/2087692.html

 

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

这个功能,可以通过HierarchicalDataTemplate来很方便地实现
1. 业务实体

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

    public class Folder
    {
        public string Name { get; set; }
        public ObservableCollection < Folder > Folders { get; set; }
    }

2. 准备数据

我用下面的代码,模拟一个数据读取操作。下面是硬编码出来的数据。实际情况下,可以读取数据库。

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var result = new[]{
                new Folder(){Name="Test",Folders =new ObservableCollection < Folder >(
                    new[]{
                        new Folder(){Name="Test4"},
                        new Folder(){Name="Test3"},
                        new Folder(){Name="Test4",Folders=new ObservableCollection < Folder >(
                            new []{new Folder(){Name ="Test5"}})
                        }
                    })}};

            tvFolders.ItemsSource = result;
        }

3. 绑定控件

< UserControl  x:Class ="SilverlightTreeviewSample.MainPage"
    xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
="d"
    d:DesignHeight
="300"  d:DesignWidth ="400"  xmlns:sdk ="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" >
    
     < UserControl.Resources >
         < sdk:HierarchicalDataTemplate  x:Key ="FolderItemTemplate"  ItemsSource =" {Binding Folders} " >
             < TextBlock  Text =" {Binding Name} " ></ TextBlock >
         </ sdk:HierarchicalDataTemplate >
         < Style  TargetType ="sdk:TreeViewItem" >
             < Setter  Property ="IsExpanded"  Value ="True" ></ Setter >
         </ Style >
       
     </ UserControl.Resources >

     < Grid  x:Name ="LayoutRoot"  Background ="White" >
         < sdk:TreeView   Name ="tvFolders"  ItemTemplate =" {StaticResource FolderItemTemplate} " >
  
         </ sdk:TreeView >
     </ Grid >
</ UserControl >

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

 
4. 查看效果

image

 

 

目录
相关文章
|
索引 Windows
一起谈.NET技术,Silverlight中使用递归构造关系图
  这两天遇到一个问题,项目中需要在silverlight中使用连接图的方式来显示任务之间的关系,总体有父子和平行两种,昨天在改同事的代码,一直出问题,索性晚上写了一下实现方法。   需求   有一个List对象中存了若干个Task,这些Task对象通过ParentID属性进行关联,现在要求将这个List中的任务使用图的方式形成如父子关系和平行关系的图示例如下图:   实现方法思考   刚开始接到这个任务我就想着递归应该可以搞定了,但是仔细考虑才发现每个任务的子任务需要在一定区域内才行,需要计算子级和子级之间的距离,如果使用递归,例如上图的元素“12”的位置就没有办法很好确定了。
706 0
|
Web App开发 前端开发 安全
一起谈.NET技术,Silverlight 结构分析
  Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。
1003 0
|
Web App开发 前端开发 安全
Silverlight 结构分析
Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。
851 0
|
开发工具 容器 开发者
Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
在web开发中,带checkbox的tree是一个很有用的东东,比如权限选择、分类管理,如果不用sl,单纯用js+css实现是很复杂的,有了SL之后,就变得很轻松了 解决方案一: 利用Silvelright ToolKit(微软的开源项目),项目地址http://silverlight.
1060 0

热门文章

最新文章