CWPFTreeView用法实例解析
概述
TreeView是常用的树状列表,在项目开发中也时常会用到,这节主要讲解treeview在wpf的基本用法!
结果演示:
代码讲解
前台xaml:<UserControl x:Class="Caliburn.Micro.Hello.Views.TreeViewView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Caliburn.Micro.Hello.Views" xmlns:self="clr-namespace:Caliburn.Micro.Hello.ViewModels" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:cal="http://www.caliburnproject.org" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> Grid.ColumnDefinitions>
<dxg:TreeListControl ItemsSource="{Binding EmployeeDepartments}" SelectedItem="{Binding CurrentSelectedItem}" Grid.Column="0" > <dxg:TreeListControl.View> <dxg:TreeListView AllowColumnFiltering="False" AllowConditionalFormattingMenu="False" AllowFixedColumnMenu="False" AllowRecursiveNodeChecking="True" AutoWidth="True" FetchSublevelChildrenOnExpand="False" IsColumnMenuEnabled="False" IsRowCellMenuEnabled="True" IsTotalSummaryMenuEnabled="False" KeyFieldName="Id" ParentFieldName="ParentId" ShowNodeImages="True" ShowSearchPanelMode="Always"> dxg:TreeListView> dxg:TreeListControl.View> <dxg:TreeListColumn AllowEditing="False" FieldName="Employees.Name" Header="{Binding TreeTitle}" /> dxg:TreeListControl>
<TreeView Grid.Column="1" Margin="10,15,10,10" ItemsSource="{Binding EmployeeDepartments}"> <TreeView.ItemContainerStyle> <Style TargetType="{x:Type TreeViewItem}" /> TreeView.ItemContainerStyle> <TreeView.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type self:EmployeeDepartment}" ItemsSource="{Binding Employees}"> <StackPanel HorizontalAlignment="Stretch" Orientation="Horizontal"> <CheckBox IsChecked="True"/> <TextBlock VerticalAlignment="Center" FontSize="14" Text="{Binding Name}" TextTrimming="CharacterEllipsis" /> StackPanel> HierarchicalDataTemplate> TreeView.ItemTemplate> TreeView> <TreeView Grid.Column="0" Grid.Row="1" ItemsSource="{Binding EmployeeDepartments}"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Employees}"> <StackPanel> <TextBlock Text="{Binding Name}"/> StackPanel> HierarchicalDataTemplate> TreeView.ItemTemplate> TreeView>
<TreeView Grid.Column="1" Grid.Row="1" ItemsSource="{Binding nodesCollection}"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding ChildNodes}"> <StackPanel HorizontalAlignment="Stretch" Orientation="Horizontal"> <CheckBox IsChecked="{Binding IsChecked}" cal:Message.Attach="[Event Click]=[Action CheckBox_Click($source,$eventArgs)]" /> <TextBlock VerticalAlignment="Center" FontSize="14" Text="{Binding NodeName}" TextTrimming="CharacterEllipsis" /> StackPanel> HierarchicalDataTemplate> TreeView.ItemTemplate> TreeView> Grid>UserControl>
后台cs代码:
using PropertyChanged;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Windows;using System.Windows.Controls;
namespace Caliburn.Micro.Hello.ViewModels{ public class TreeViewViewModel : Screen, IViewModel { public TreeViewViewModel() { DisplayName = "TreeView"; EmployeeDepartments = Departments.GetDepartments();
nodesCollection = new ObservableCollection() { new TreeNode() { NodeName = "中国人", ChildNodes = new ObservableCollection() { new TreeNode(){ NodeName = "李嘉诚"}, new TreeNode() { NodeName = "王健林", ChildNodes = new ObservableCollection() { new TreeNode(){ NodeName = "68岁"}, new TreeNode(){ NodeName = "一个儿子"}, } }, } }, new TreeNode() { NodeName = "外国人", ChildNodes = new ObservableCollection() { new TreeNode() { NodeName = "马斯克", ChildNodes = new ObservableCollection() { new TreeNode(){ NodeName = "51岁"}, new TreeNode(){ NodeName = "10个老婆"}, } }, } } }; } public List EmployeeDepartments { get; set; }
public List nodes { get; set; } public ObservableCollection nodesCollection { get; set; } public void CheckBox_Click(object sender, RoutedEventArgs e) { CheckBox checkBox; if (sender is CheckBox) { checkBox = sender as CheckBox; } else { return; }
foreach (var childNode in nodesCollection) { SetIsChecked(childNode); } }
public void SetIsChecked(TreeNode treeNode) { foreach (var child in treeNode.ChildNodes) { if (!treeNode.IsChecked) { child.IsChecked = false; } SetIsChecked(child); } }
}
public static class Departments { public static List GetDepartments() { List departments = new List(); departments.Add(new EmployeeDepartment("Management", new Employee[] { new Employee(0, "Gregory S. Price") })); departments.Add(new EmployeeDepartment("Marketing", new Employee[] { new Employee(1, "Irma R. Marshall"), new Employee(2, "Brian C. Cowling"), new Employee(3, "Thomas C. Dawson"), new Employee(4, "Bryan R. Henderson"), })); departments.Add(new EmployeeDepartment("Operations", new Employee[] { new Employee(5, "John C. Powell"), new Employee(6, "Harold S. Brandes"), new Employee(7, "Jan K. Sisk"), new Employee(8, "Sidney L. Holder"), })); departments.Add(new EmployeeDepartment("Production", new Employee[] { new Employee(9, "Christian P. Laclair"), new Employee(10, "James L. Kelsey"), new Employee(11, "Howard M. Carpenter"), new Employee(12, "Jennifer T. Tapia"), })); departments.Add(new EmployeeDepartment("Finance", new Employee[] { new Employee(13, "Karen J. Kelly"), new Employee(14, "Judith P. Underhill"), new Employee(15, "Russell E. Belton"), })); return departments; } }
public class Employee { public Employee(int id, string name) { ID = id; Name = name; } public int ID { get; set; } public string Name { get; set; } } public class EmployeeDepartment { public string Name { get; set; } public ObservableCollection Employees { get; }
public EmployeeDepartment(string name, IEnumerable employees) { Name = name; Employees = new ObservableCollection(employees); } }
[AddINotifyPropertyChangedInterface] public class TreeNode { public string NodeName { get; set; } public bool IsChecked { get; set; } public ObservableCollection ChildNodes { get; set; } public TreeNode() { IsChecked = true; ChildNodes = new ObservableCollection(); } }}
通过SetIsChecked方法实现了主节点取消勾选后,子节点也跟着去勾选,要勾选子节点,也先得选中主节点.源码下载
链接:https://pan.baidu.com/s/1ty500tUFPNGtfnJorqaZ7A
提取码:6666
中国气象局召开专题会议研究部署西南地区业务能力提升工作5月31日,中国气象局召开专题会议,交流西南地区业务能力提升工作进展,研究梳理存在问题,部署下一步工作。中国气象局党组书记局长庄国泰强调,要深入贯彻落实习近平总书记关于气象工作重要
2010年辽宁农妇收留黑熊弃婴,当成孙子养,驯养得温顺可爱熊,是一种外表十分可爱的动物,但是,在它们呆萌的外表之下,却隐藏着嗜血的本性。恶熊伤人吃人的新闻经常见诸报端。可是,在辽宁丹东附近的一个村庄,却有一位农妇,将一头被遗弃的小熊当成孙
问法热线朋友欠10万元钱不还,借款人找上担保人要账半岛问法热线聚焦借贷纠纷,电话不断两位律师在线解答半岛全媒体记者尹彦鑫蒋凯实习生彭天琪购房时房屋有第三方借款抵押该怎么办?担保人的一般保证责任和连带保证责任有什么区别?5月31日,半岛问法热线聚焦借贷纠纷,山东华赛律师事务所周静怡
佩里西奇以队歌告别自豪为国米效力这是段持续一生的无限快乐直播吧5月31日讯佩里西奇更新社媒,发文告别国际米兰,他以国米队歌作为结尾。佩里西奇写道我身穿代表着荣耀的国米球衣,进行了254场比赛,18934分钟的出场时间,贡献了55个进球,
网红知名探花小宝落网记,当红时一晚赚十万,最后锒铛入狱了导读网红探花小宝落网记,当红时一晚赚十万,最后锒铛入狱了。探花到底是什么意思?有点像古代寻花问柳的意思探花是一种违法犯罪行为在网络直播中,探花的任务就是约一些漂亮的美女一起打扑克,
卡根的预言弗雷德里克。卡根(FrederickW。Kagan),美国企业研究所常驻学者,西点军校军史教授,6月7日在ISW发文说北顿涅茨克战役是俄罗斯以战斗形式进行的情报行动,莫斯科的主要目
你经历过绝望吗?看看这些人的经历话说,人生在世,难免会遇到各种倒霉的事,或者犯各种错误,俗话说知错能改,善莫大焉,然而,有些错误的代价却有点高在reddit上,有一个叫ThatLookedExpensive(那看
邀罗智强当空战指挥官?张善政最新回应张善政(中)。(图片来源台湾中时新闻网)中国台湾网6月8日讯据台湾中时新闻网报道,中国国民党主席朱立伦征召台行政机构前负责人张善政参选桃园市长,引发蓝营一场内部风暴,最后是中国国民
汉成帝一个荒谬绝伦的败家子滚滚长江东逝水,浪花淘尽英雄,是非成败转头空,青山依旧在,几度夕阳红。纵观中国历史,犹如一本百科全书,形形色色的人物,你方唱罢我登场。有的人留名青史,有的人背负骂名。有的人荒谬绝伦
妹子,你这样补车胎,创口贴有点小吧妹子,赶紧下去吧!旁边的大哥笑了一下兄弟,你的手还能钓鱼五菱不愧是大哥,天塌下来大哥顶着!妹子,你这样补车胎,创口贴有点小吧兄弟,你估计快失去这个儿媳妇了兄弟,你这一下摔得挺惨的走
600多吨的安俄罗斯和乌克兰的战争愈演愈烈,在这样的情形之下,大家都会有更多的担心,在武器发展以及众多方面大家都觉得乌克兰其实是不如俄罗斯。俄罗斯近几年来的发展非常的有优势,不论是在经济还是武器