Silverlight 中 TreeView 的数据绑定

方法一:Silverlight使用XAML标记语言来编写,如果不使用XAML强大的绑定功能,实在是罪过。通过使用绑定
,可以将UI与视图模型层分离,有利于系统的维护。作为Silverlight中比较有代表型的一个控件: TreeV
iew 有着比较特殊的绑定。与一般的绑定不同,绑定到TreeView的元素之间是一个无限级联的关系。下面
是这种绑定的最简单实现过程。

1, 引用命名空间:clr­namespace:System.Windows;assembly=System.Windows.Controls;给这
个命名空间取个别名:common

2, 为TreeView 定义数据源。这里实际上只是定义了TreeNode绑定的实体的定义,TreeView绑定的则是
这个实体对象的集合,该实体对象的定义如下:

 public class TreeNode
  {
     public string Name { getset; }
      public Collection<TreeNode> Nodes { getset; }
  }

3, 定义TreeView中节点的模板,这个模板需要使用分层的数据模板:common:HierarchicalDataTemp
late;其代码如下:

  <UserControl.Resources>
         <common:HierarchicalDataTemplate x:Key="TreeNodeTemplate" ItemsSource="{Binding Path=Nodes}" >
             <TextBlock Text="{Binding Path=Name}" />
        </common:HierarchicalDataTemplate>
    </UserControl.Resources>

4, 将在第3步中定义的模板绑定到TreeView控件。他的绑定也是很简单,如下面的代码所示:

  <sdk:TreeView HorizontalAlignment="Left" Margin="12,12,0,12" Name="treeView1" Width="199" ItemTemplate="{StaticResource TreeNodeTemplate}" />

上面的两行代码,即完成了TreeView的绑定, 只需要将在第3步中定义的模板绑定到TreeView控件的Ite
mTemplate即可。以上这4步完成之后,只需要为 TreeView ItemSource指定一个 TreeNode的集合,
即可将此实体绑定到 TreeView中。

方法二:为了让标记更加简洁,此示例中,将这一操作放到前页面的后台代码
中,如下所示:

 public partial class Page1 : UserControl
    {
        public Page1()
        {
            InitializeComponent();
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            Person p = new Person();
            p.Name = "xujiaoxiang";
            p.Age = 123;
            p.Address = "dd";
            this.LayoutRoot.DataContext = p;
        }

        private void TreeView_Loaded(object sender, RoutedEventArgs e)
        {
            Tree tree = new Tree();
            tree.Name = "root";
            tree.Children = new List<Tree>();
            for (int i = 0; i < 5; i++)
            {
                Tree child = new Tree();
                child.Name = "child" + i.ToString();
                child.Children = new List<Tree>();
                for (int j = 0; j < i; j++)
                {
                    Tree sub = new Tree();
                    sub.Name = "sub" + j.ToString();
                    sub.Children = null;
                    child.Children.Add(sub);
                }
                tree.Children.Add(child);
            }
            myTreeView.DataContext = tree;
            //myTreeView.ItemsSource = tree.Children;
        }

        public class Tree
        {
            public string Name { get; set; }
            public List<Tree> Children { get; set; }
        }
    }

 

posted @ 2015-02-09 10:49  HongMaJu  阅读(279)  评论(0编辑  收藏  举报