WPF之TreeView(1)

前台控件代码:

 

   <TreeView Name="TreeView" ItemsSource="{Binding Name }">
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate ItemsSource="{Binding  Nodes}">
                    <TextBlock Text="{Binding Name}" />
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>

 

 

后台绑定:

    //定义节点类Node
    public class Node
    {
        //构造函数
        public Node()
        {
            this.Nodes = new List<Node>();
        }
        public int ID { get; set; }//内码
        public string Name { get; set; }//名称
        public bool IsParent { get; set; }//是否父级
        public int OwnerID { get; set; }//上一级内码
        public List<Node> Nodes { get; set; }//节点集合
    }

    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class Page1 : Page
    {
        public Page1()
        {
            InitializeComponent();
            List<Node> nodesList = new List<Node>()//创建节点的数据集合对象
             {
                 new Node { ID = 1000, Name = "系统"    , IsParent=true,  OwnerID = 0    },
                 new Node { ID = 1100, Name = "软件设置", IsParent=false, OwnerID = 1000 },
                 new Node { ID = 1200, Name = "数据备份", IsParent=false, OwnerID = 1000 },
                 new Node { ID = 1300, Name = "数据恢复", IsParent=false, OwnerID = 1000 },
                 new Node { ID = 2000, Name = "基础资料", IsParent=true,  OwnerID = 0    },
                 new Node { ID = 2100, Name = "用户管理", IsParent=false, OwnerID = 2000 },
                 new Node { ID = 2200, Name = "用户组  ", IsParent=false, OwnerID = 2000 },
                 new Node { ID = 2300, Name = "组织机构", IsParent=false, OwnerID = 2000 },
             };
            List<Node> outputList = Bind(nodesList);// 绑定树
            this.TreeView.ItemsSource = outputList;//绑定TreeView.Items数据源
        }

        /// <summary>
        /// 绑定树
        /// </summary>
        List<Node> Bind(List<Node> nodes)
        {
            List<Node> outputList = new List<Node>();//定义节点集合outputList
            for (int i = 0; i < nodes.Count; i++)//按节点数量循环
            {
                if (nodes[i].OwnerID == 0)//判断是否根节点
                {
                    outputList.Add(nodes[i]);//是根节点的,节点集合中加上节点
                }
                else
                {
                    FindDownward(nodes, nodes[i].OwnerID).Nodes.Add(nodes[i]);//不是根节点的向下查找
                }
            }
            return outputList;
        }

        /// <summary>
        /// 向下查找
        /// </summary>
        Node FindDownward(List<Node> nodes, int id)
        {
            if (nodes == null)
            {
                return null;//节点集合为空返回null
            }
            for (int i = 0; i < nodes.Count; i++)//按nodes节点集合数量循环
            {
                if (nodes[i].ID == id)//判断节点的id是否与父节点相同
                {
                    return nodes[i];//是父节点返回节点
                }
                Node node = FindDownward(nodes[i].Nodes, id);//向下查找
                if (node != null)//节点不等于返回节点
                {
                    return node;
                }
            }
            return null;//返回空值
        }
    }

posted @ 2012-07-27 19:58  Peter_youny  阅读(635)  评论(2编辑  收藏  举报