zoukankan      html  css  js  c++  java
  • Silverlight 中 TreeView 的数据绑定

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

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

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

       1:  public class TreeNode
       2:  {
       3:      public string Name { get; set; }
       4:      public Collection<TreeNode> Nodes { get; set; }
       5:  }

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

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

    如上面的代码所示: ItemsSource中的Nodes表示的是TreeViewNode对应实体的子实体属性名称。见TreeNode类中的第二个属性:Nodes。而上面代码中的TextBlock的Text属性所绑定的数据则是来自于 TreeNode实体中的 Name属性。

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

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

    上面的两行代码,即完成了TreeView的绑定, 只需要将在第3步中定义的模板绑定到TreeView控件的ItemTemplate即可。以上这4步完成之后,只需要为 TreeView ItemSource指定一个 TreeNode的集合,即可将此实体绑定到 TreeView中。为了让标记更加简洁,此示例中,将这一操作放到前页面的后台代码中,如下所示:

       1:  public partial class MainPage : UserControl
       2:  {
       3:      private Collection<TreeNode> TreeNodes;
       4:   
       5:      public MainPage()
       6:      {
       7:          InitializeComponent();
       8:   
       9:          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
      10:      }
      11:      void MainPage_Loaded(object sender, RoutedEventArgs e)
      12:      {
      13:          OnLoadNodes();
      14:          OnBindDataSource();
      15:      }
      16:      private void OnBindDataSource()
      17:      {
      18:          this.treeView1.ItemsSource = TreeNodes;
      19:      }
      20:      private void OnLoadNodes()
      21:      {
      22:          TreeNodes = new Collection<TreeNode>();
      23:   
      24:          for (int i = 0; i < 10; i++)
      25:          {
      26:              TreeNode node = new TreeNode();
      27:              node.Name = i.ToString();
      28:   
      29:              for (int j = 0; j < 10; j++)
      30:              {
      31:                  TreeNode subNode = new TreeNode();
      32:                  subNode.Name = j.ToString();
      33:   
      34:                  if (node.Nodes == null)
      35:                      node.Nodes = new Collection<TreeNode>();
      36:   
      37:                  node.Nodes.Add(subNode);
      38:              }
      39:   
      40:              TreeNodes.Add(node);
      41:          }
      42:      }
      43:  }
  • 相关阅读:
    Nginx下载服务器配置文件
    php7连接mysql测试代码
    Vagrant 构建 Linux 开发环境
    清理buffer/cache/swap的方法梳理
    【12】
    python全栈目录
    Chrome启动后打开第一个网页很慢的解决方案
    Pycharm快捷键
    TEst
    1、Linux命令随笔
  • 原文地址:https://www.cnblogs.com/prolove2/p/2558405.html
Copyright © 2011-2022 走看看