在Silverlight中使用HierarchicalDataTemplate为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. 查看效果

 
 

时间: 2024-08-31 07:58:17

在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构的相关文章

java json 数据转换-JAVA中如何将数据组装为json树状结构的数据

问题描述 JAVA中如何将数据组装为json树状结构的数据 我从数据库中查出的数据保存到一个集合List中,集合中是存的区域类Area.区域类的字段和数据库中结果的字段一样.图1中是我的数据库查询结果,想转行为json格式的树状结构.例如省-市-县这样的结构.就是图2的效果 图1: 图2: 弄了一天了还没出现,我太菜了.请大家帮帮忙 解决方案 要么你就自己纯拼字符串,要么就直接用fastjson这类json工具类直接转.只要类结构和json结构能对应,可以直接转就可以了. 解决方案二: 你定义一

用中值排序基数法实现树状结构——让递归滚一边去

递归|排序 用中值排序基数法实现树状结构     在BBS的编写中,经常有人问怎样实现树状结构?一个比较不负责任的回答是:使用递归算法.当然,递归是一个可行的办法(二叉树的历遍也好象只能使用递归算法),但对于BBS来说,这样做势必要进行大量的Sql查询(虽然可以使用存储过程来做,但要从根本上加快速度,则应该考虑更快的算法).下面给出一个可行的彻底屏弃递的实现树状结构的算法.     下面给出另一种使用"使用中值排序基数法"实现树状结构:一.主要思想:增加一个排序基数字段ordernum

父节点-树状结构展示采购单Treeview 第二季

问题描述 树状结构展示采购单Treeview 第二季 第一季没有得到答案,现在想到能否把父节点定义为 PO号,子节点为PO号+产品号,这样的话,每个子节点可以找到对应的父节点..请高手列出详细方案,在线死等. 解决方案 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dt As New DataTable '模拟数据(要求按采购单排

“中值排序基数法实现树状结构”的补充

排序 "中值排序基数法实现树状结构"的补充     由于一时疏忽,造成了此法"对于int类型的基数字段,对原始贴的回复只能有31个:numeric类型的基数字段,对原始贴的回复也不能超过120个"(实际上是对于int型字段,原始贴的回复第32个以上的树状结构显示开始紊乱,对于numeric型的基数字段,原始贴的回复从121个以上树状结构显示开始紊乱--回复并不会出问题),这是由于计算机存储精度引起的.    我们可以将加贴的存储过程修改一下(加进前面加上**号的行)

使用多中值排序基数实现大型树状结构

排序 使用多中值排序基数实现大型树状结构     在"中值排序基数法实现树状结构"中,为了解决回复限制的问题,我们可以增加第二(三.四--)基数字段.    其实在一般的BBS中,使用一个基数已经足够,因为一个贴子的回复太多或深度太大的时候,无论你的树状结构做得多好,由于屏幕的限制(显示折行),显示总会乱,因此不如象在<补充>一文中,达到一定深度或个数时,后面的贴子采用平行显示的方法,不过那部分已经不再是树状结构了.    原理:在贴子显示的order by子句中,如果排序

winfrom 把数据库中的数据以树状结构返所有组信息,然后返回的树状结果以JSON格式构造

问题描述 新建Group表,表结构如下(组信息表)列名数据类型长度小数标识允许空默认说明GroupIDint40是/主键否组IDGroupNamevarchar500否ProjectIDint40是所属项目IDParentGroupIDint40是父级组别ID,若为空,则为根组publicstaticStringGetAllGroupTree()i.以树状结构返所有组信息ii.返回的树状结果以JSON格式构造宝宝新手,刚第一个问题写出来,可是第二个不知道怎么弄了,怎么把第二个的内容以Text控件

sql server 树状结构表中,获取指定节点的所有父节点路径

CREATE PROCEDURE [dbo].[A_P_GetParentIds] ( @IdValue NVARCHAR(36) ,-- 子节点值 @tableName NVARCHAR(MAX) ,-- 表名 @ParentIdColumnName NVARCHAR(MAX) ,-- 父节点列名 @ChildIdColumnName NVARCHAR(MAX)-- 子节点列名 ) AS DECLARE @sqlTemp NVARCHAR(MAX); --查询sql SET @sqlTemp

聊聊树状结构如何在数据库中存储

转发:http://www.cnblogs.com/honghuamin/archive/2011/07/24/2115635.html

treeview-树状结构展示采购单Treeview 第三季

问题描述 树状结构展示采购单Treeview 第三季 在第二季中,由于tiger_zhao 的回归,使剧情发生重大改变.下面贴出最新状况,希望这一季中能解决产品号Pcode为空时候引起的问题. 解决方案 在数据查询上面控制,如果为空,用其他值代替...解决了..谢谢. 解决方案二: 问题补充代码: Public Class SampleInst Dim mycn As New SqlClient.SqlConnection Dim myadapter As New SqlClient.SqlDa