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:  }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM