转帖|其它|编辑:郝浩|2011-08-10 14:26:04.000|阅读 5594 次
概述:最近有部分朋友经常问我,WPF的TreeView控件,如何用MVVM来实现绑定和显示?所以写下了这篇WPF应用基础篇---TreeView.
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
最近有部分朋友经常问我,WPF的TreeView控件,如何用MVVM来实现绑定和显示?所以写下了这篇WPF应用基础篇---TreeView.
1.介绍
图 1-1(案例结构图)
整个Demo分为两部分:左边是功能菜单,右边是显示具体内容,可以参考图1-1。
基础数据:为了实现一下案例功能,我建立了一个SmlAnt.DataLibrary的数据类库,专门提供原始基本类型和基本数据。下面是具体代码:
实体类:
数据工厂:
案例一, 主要为大家介绍如何创建一个无限级的树,其实说简单点就是采用HierarchicalDataTemplate 作为树模板,然后通过Binding把数据绑定到树上。因为模板是HierarchicalDataTemplate这个模板,这里就不详细讲解,如果了 解多点可以到MSDN,所以会无限级别的增加,只要数据结构上能支持,数据有多少级别,View中显示的树也会对应有多少级别。而如果采用的是DataTemplate的话,则只能有一层的数据。
效果图如下:
图 1-2(无限级别树)
View(XAML)代码 代码1-3:
ViewModel代码:
案例二, 主要给大家讲解的是,如何采用DataTmeplateSelector通过重写SelectTemplate方法来实现的。来控制显示样式、右键菜单等 功能。这里主要讲的是,不同服务器之间显示不一样,而且连快捷菜单也对应不一样。这里有个特别说明的是:因为功能显示的需求,这里把集线器定义为没有子设 备的模板。还有另外一个功能就是当我按下重启的时候,断开按钮就不能使用。这里用到的是Command。园里前辈们写了很多这方面的文章,我这里就不对 ICommand进行详细讨论。
效果图:图1-1
快捷菜单(如下图):
图 1-3(路由器快捷菜单) 图 1-4(交换机快捷菜单) 图1-5(集线器快捷菜单)
快捷菜单代码:
TreeView模板代码:
DataTemplateSelector代码:
ViewModel代码:
案例三,主要跟大家分享的是,如何在TreeView上实现三态树的功能。具体什么是三态树的话我在这里就不多说了。以下是案例三的具体结构图和代码:
结构图:
图 1-6(三态树)
代码:具体代码实现在上面的实体类代码的 IDevice中实现。请参考上面代码。
2.个人观点
很多朋友都抱怨说WPF的TreeView是一个很麻烦的东西,而且不好用。这点我持反对的意见,每一种新东西,在我们还不熟悉的时候,是挺麻烦的。但是 WPF--TreeView较WinForm--Tree来说,WPF提供一个强大的模板功能,能让我们根据自己的需要,灵活地更换模板。如果在做 WinForm开发的时候,我想实现一棵树上保存N种数据类型的数据,而且根据不同的类型,在节点上显示不一样的状态和样式,也许你会花很多的时间来重写 Tree的控件,而WPF提供了一个模板功能,而且具体的模板是我们自己来实现的。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:博客园