提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|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
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢