WPF—TreeView无限极绑定集合形成树结构

1.如图所示:绑定树效果图

WPF—TreeView无限极绑定集合形成树结构

 

2.前台Xaml代码:

<Window x:Class="WpfTest.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        xmlns:mode="clr-namespace:WpfTest"

        Title="TreeView无限级树绑定事例" Height="300" Width="300" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize">

    <Grid>

        <Grid.Resources>

            <HierarchicalDataTemplate DataType="{x:Type mode:Node}" ItemsSource="{Binding Nodes}">

                <StackPanel Orientation="Horizontal" Margin="0,2,0,2">

                    <!--<Image Source="pack://application:,,,/WpfTest;Component/Resources/KnowDot.png" Width="16" Height="16" />-->

                    <!--<Image Source="Resources/KnowDot.png" Width="16" Height="16" />-->

                    <Image Source="/WpfTest;Component/Resources/KnowDot.png" Width="16" Height="16" />

                    <TextBlock Text="{Binding Name}" ToolTip="{Binding Name}" Tag="{Binding}"/>

                </StackPanel>

            </HierarchicalDataTemplate>

        </Grid.Resources>

        <TreeView Name="TreeView"/>

    </Grid>

</Window>

2.后台cs代码:采用递归无限极向下查询

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Threading;

using System.Diagnostics;

using System.Windows.Markup;

 



namespace WpfTest

{

    /// <summary>

    /// MainWindow.xaml 的交互逻辑

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

            List<Node> nodes = new List<Node>()

            {

                new Node { ID = 1, Name = "中国" },

                new Node { ID = 2, Name = "北京市", ParentID = 1 },

                new Node { ID = 3, Name = "吉林省", ParentID = 1 },

                new Node { ID = 4, Name = "上海市", ParentID = 1 },

                new Node { ID = 5, Name = "海淀区", ParentID = 2 },

                new Node { ID = 6, Name = "朝阳区", ParentID = 2 },

                new Node { ID = 7, Name = "大兴区", ParentID = 2 },

                new Node { ID = 8, Name = "白山市", ParentID = 3 },

                new Node { ID = 9, Name = "长春市", ParentID = 3 },

                new Node { ID = 10, Name = "抚松县", ParentID = 8 },

                new Node { ID = 11, Name = "靖宇县", ParentID = 8 }

            };

            // 绑定树

            List<Node> outputList = Bind(nodes);

            //(TreeView.SelectedItem as Node).ID

            this.TreeView.ItemsSource = outputList;

            //TreeViewItem item = new TreeViewItem();

            //item.Header = "";

        }

        /// <summary>

        /// 绑定树

        /// </summary>

        List<Node> Bind(List<Node> nodes)

        {

            List<Node> outputList = new List<Node>();

            for (int i = 0; i < nodes.Count; i++)

            {

                if (nodes[i].ParentID == -1)

                {

                    outputList.Add(nodes[i]);

                }

                else

                {

                    FindDownward(nodes, nodes[i].ParentID).Nodes.Add(nodes[i]);

                }

            }

            return outputList;

        }

        /// <summary>

        /// 递归向下查找

        /// </summary>

        Node FindDownward(List<Node> nodes, int id)

        {

            if (nodes == null) return null;

            for (int i = 0; i < nodes.Count; i++)

            {

                if (nodes[i].ID == id)

                {

                    return nodes[i];

                }

                Node node = FindDownward(nodes[i].Nodes, id);

                if (node != null)

                {

                    return node;

                }

            }

            return null;

        }

    }

 

    public class Node

    {

        public Node()

        {

            this.Nodes = new List<Node>();

            this.ParentID = -1;

        }

        public int ID { get; set; }

        public string Name { get; set; }

        public int ParentID { get; set; }

        public List<Node> Nodes { get; set; }

    }

}

 

你可能感兴趣的:(treeview)