在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

 

 

目录
相关文章
|
Web App开发 前端开发 安全
一起谈.NET技术,Silverlight 结构分析
  Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。
966 0
|
Web App开发 前端开发 安全
Silverlight 结构分析
Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。
827 0
Silverlight Telerik控件学习:TreeView数据绑定并初始化选中状态、PanelBar的Accordion效果、TabPanel、Frame基本使用
实际开发中控件的数据源肯定是动态绑定的,不可能在xaml里写死item项。既然要绑定,就先来几个实体类: 上面是类图,各类的代码如下:  BusinessBaseObject using System.
1029 0
|
开发工具 容器 开发者
Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
在web开发中,带checkbox的tree是一个很有用的东东,比如权限选择、分类管理,如果不用sl,单纯用js+css实现是很复杂的,有了SL之后,就变得很轻松了 解决方案一: 利用Silvelright ToolKit(微软的开源项目),项目地址http://silverlight.
1037 0

热门文章

最新文章