彩票走势图

如何在TreeView中实现分层数据显示

转帖|其它|编辑:郝浩|2011-01-14 11:29:31.000|阅读 1238 次

概述:在项目开发中,常常需要以树的形式来组织数据的层次关系,最常用的控件莫过于TreeView了,本文就是对如何在TreeView中实现分层数据显示进行介绍。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  在项目开发中,常常需要以树的形式来组织数据的层次关系,最常用的控件莫过于TreeView了,本文就是对如何在TreeView中实现分层数据显示进行介绍。

  固定内容的树

  当TreeView中的内容为固定值的时候,我们可以直接使用xaml对其内容进行设置,而不必使用代码绑定,这样做的好处是设置简单且系统负担较轻。

  示例代码如下:

<sdk:TreeView Name="tviSample" VerticalAlignment="Top"> 
   <sdk:TreeViewItem Header="茶" > 
     <sdk:TreeViewItem Header="铁观音"> 
       <sdk:TreeViewItem Header="福建"></sdk:TreeViewItem> 
       <sdk:TreeViewItem Header="云南"></sdk:TreeViewItem> 
     </sdk:TreeViewItem> 
       <sdk:TreeViewItem Header="龙井"></sdk:TreeViewItem> 
       <sdk:TreeViewItem Header="茉莉花"></sdk:TreeViewItem> 
     </sdk:TreeViewItem> 
     <sdk:TreeViewItem Header="书"> 
       <sdk:TreeViewItem Header="计算机类"> 
             <sdk:TreeViewItem Header="银光志"></sdk:TreeViewItem> 
       </sdk:TreeViewItem> 
       <sdk:TreeViewItem Header="历史小说类"> 
         <sdk:TreeViewItem Header="明朝那些事儿"></sdk:TreeViewItem> 
         <sdk:TreeViewItem Header="历史是个什么玩意儿"></sdk:TreeViewItem> 
       </sdk:TreeViewItem> 
     </sdk:TreeViewItem> 
</sdk:TreeView>

  在Visual Studio IDE中通过设置TreeView的Items属性,可以很快的为树添加子成员,也可为子成员(ListViewItem)继续添加子成员。

  动态绑定内容的树

  但是绝大多数的情况下,树的内容是需要通过代码动态生成的,对于动态生成的树,可以使用下面的实例代码来实现和上述xaml代码一样的效果(虽然这样做意义不大…):

<sdk:TreeView Name="tviSample" VerticalAlignment="Top"> 
</sdk:TreeView>
public MainPage() 

   InitializeComponent(); 
  
   TreeViewItem tviItem = new TreeViewItem() { Header =  "茶" }; 
   TreeViewItem tviSubItem=new TreeViewItem(){ Header= "铁观音"}; 
   tviSubItem.Items.Add(new TreeViewItem() { Header =  "福建" }); 
   tviSubItem.Items.Add(new TreeViewItem() { Header =  "云南" }); 
   tviItem.Items.Add(tviSubItem); 
   tviSubItem = new TreeViewItem() { Header =  "龙井" }; 
   tviItem.Items.Add(tviSubItem); 
   tviSubItem = new TreeViewItem() { Header =  "茉莉花" }; 
   tviItem.Items.Add(tviSubItem); 
   tviSample.Items.Add(tviItem); 
  
   tviItem = new TreeViewItem() { Header =  "书" }; 
   tviSubItem = new TreeViewItem() { Header =  "计算机" }; 
   tviSubItem.Items.Add(new TreeViewItem() { Header =  "银光志" }); 
   tviItem.Items.Add(tviSubItem); 
   tviSubItem = new TreeViewItem() { Header =  "历史小说" }; 
   tviSubItem.Items.Add(new TreeViewItem() { Header =  "明朝那些事儿" }); 
   tviItem.Items.Add(tviSubItem); 
   tviSample.Items.Add(tviItem); 
}

  上面的例子虽然是使用代码为树添加子节点或叶子节点,但是在实际的项目开发中,我们更多的是使用一个自定义的数据源,比如说ObservableCollection(使用这个类需要引入 System.Collections.ObjectModel命名空间)的一个对象来绑定到树的数据源上,再将对象的某系字段绑定到树的模板上。这个时候,就该 HierarchicalDataTemplate 闪亮登场了,HierarchicalDataTemplate就是专门用来配合TreeView实现数据绑定效果的,如以下代码所示:

<sdk:TreeView Name="tviSample" ItemsSource="{Binding}"VerticalAlignment="Top"> 
   <sdk:TreeView.ItemTemplate> 
     <sdk:HierarchicalDataTemplate ItemsSource="{Binding Path=SubItems}"> 
       <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="{Binding Path=GoodsName}"></TextBlock> 
       </StackPanel> 
     </sdk:HierarchicalDataTemplate> 
   </sdk:TreeView.ItemTemplate> 
</sdk:TreeView>
public partial class MainPage : UserControl 

   public MainPage() 
   { 
     InitializeComponent(); 
   } 
  
   private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
   { 
     ObservableCollection currentGoods = new ObservableCollection(); 
     currentGoods.Add(new Goods() { GoodsName =  "书1", GoodsId = 1 }); 
     currentGoods.Add(new Goods() { GoodsName =  "书2", GoodsId = 2 }); 
     tviSample.DataContext = currentGoods; 
   } 

public class Goods 

   public string GoodsName { get; set; } 
   public int GoodsId { get; set; } 
   public Goods() { } 
   public Goods(string GoodsName, int GoodsId) 
   { 
     this.GoodsId = GoodsId; 
     this.GoodsName = GoodsName; 
   } 
 

  以上实例实现了一层的绑定,想实现两层绑定该如何处理?请看下面示例代码:

<Grid x:Name="LayoutRoot" Loaded="LayoutRoot_Loaded"> 
   <Grid.Resources> 
     <sdk:HierarchicalDataTemplate x:Key="ChildTemplate" > 
       <TextBlock Text="{Binding Path=GoodsName}"></TextBlock> 
     </sdk:HierarchicalDataTemplate> 
     <sdk:HierarchicalDataTemplate x:Key="RootTemplate" ItemsSource=

"{Binding SubItems}" temTemplate="{StaticResource ChildTemplate}" > 
       <TextBlock Text="{Binding Path=GoodsName}"></TextBlock> 
     </sdk:HierarchicalDataTemplate> 
   </Grid.Resources> 
  ; <sdk:TreeView ItemTemplate="{StaticResource RootTemplate}" Name=

"tviSample" ItemsSource="{Binding}"> 
   </sdk:TreeView> 
</Grid>
public partial class MainPage : UserControl 

   public MainPage() 
   { 
     InitializeComponent(); 
   } 
  
   private void LayoutRoot_Loaded(object sender, RoutedEventArgs e) 
   { 
     ObservableCollection currentGoods = new ObservableCollection(); 
  
     currentGoods.Add(new Goods() { GoodsName =  "书1", GoodsId = 1 }); 
     currentGoods.Add(new Goods() { GoodsName =  "书2", GoodsId = 2 }); 
  
     currentGoods[0].SubItems.Add(new Goods() { GoodsName =  "书11", GoodsId = 11 }); 
     currentGoods[0].SubItems.Add(new Goods() { GoodsName =  "书12", GoodsId = 12 }); 
     currentGoods[0].SubItems.Add(new Goods() { GoodsName =  "书13", GoodsId = 13 }); 
  
     tviSample.DataContext = currentGoods; 
   } 

public class Goods 

   public string GoodsName { get; set; } 
   public int GoodsId { get; set; } 
   public ObservableCollection SubItems { get; set; } 
  
   public Goods() { SubItems = new ObservableCollection(); } 
   public Goods(string GoodsName, int GoodsId):this() 
   { 
     this.GoodsId = GoodsId; 
     this.GoodsName = GoodsName; 
   } 
}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP