范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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();
   //方法1 //nodes = new List() //{ // new TreeNode(){ ParentID = 0,NodeID = 1,NodeName = "Chapter1"}, // new TreeNode(){ ParentID = 0,NodeID = 2,NodeName = "Chapter2"}, // new TreeNode(){ ParentID = 0,NodeID = 3,NodeName = "Chapter3"}, // new TreeNode(){ ParentID = 1,NodeID = 4,NodeName = "Section1.1"}, // new TreeNode(){ ParentID = 1,NodeID = 5,NodeName = "Section1.2"}, // new TreeNode(){ ParentID = 2,NodeID = 6,NodeName = "Section2.1"}, // new TreeNode(){ ParentID = 3,NodeID = 7,NodeName = "Section3.1"}, // new TreeNode(){ ParentID = 6,NodeID = 8,NodeName = "SubSection2.1.1"}, // new TreeNode(){ ParentID = 6,NodeID = 9,NodeName = "SubSection2.1.2"}, // new TreeNode(){ ParentID = 2,NodeID = 10,NodeName = "Section2.2"}, // new TreeNode(){ ParentID = 3,NodeID = 11,NodeName = "Section3.2"}, //}; //nodes = getNodes(0,nodes);
   //方法2  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; } //private List getNodes(int parentID, List nodes) //{ // List mainNodes = nodes.Where(x => x.ParentID == parentID).ToList(); // List otherNodes = nodes.Where(x => x.ParentID != parentID).ToList(); // foreach (TreeNode node in mainNodes) // node.ChildNodes = getNodes(node.NodeID, otherNodes); // return mainNodes; //} public void CheckBox_Click(object sender, RoutedEventArgs e) { CheckBox checkBox; if (sender is CheckBox) { checkBox = sender as CheckBox; } else { return; }
   //SetIsChecked(nodesCollection); foreach (var childNode in nodesCollection) { //SetIsChecked(childNode, checkBox.IsChecked); SetIsChecked(childNode); } }
   //public void SetIsChecked(ObservableCollection childNodes) //{ // foreach (var childNode in childNodes) // { // if(!childNode.IsChecked) // { // foreach (var child in childNode.ChildNodes) // { // child.IsChecked = false; // SetIsChecked(child.ChildNodes); // } // } // else // { // SetIsChecked(childNode.ChildNodes); // } // } //}
   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 int NodeID { get; set; } //public int ParentID { get; set; } 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

勇士这是最坏的时候,这是最好的时候今天阵容周五晚上勇士败给鹈鹕后,战绩来到了3胜7负,排名西部第十二。上次勇士四连败还要追溯到20年前了,这个赛季截止至今,只有魔术篮网活塞火箭和勇士输了6场以上,即使开局最糟糕的湖篮网向欧文提出六项要求,全部做到才能重返球队运动报记者ShamsCharania报道,消息源透露,篮网已经向后卫凯里欧文提出六项要求,要求欧文必须做到才能回归球队。这六项要求分别是1。对转发电影链接进行道歉谴责该电影2。捐赠葡萄牙初选名单出炉,B费领衔中场,若塔伤缺,米兰新星入选北京时间11月5日,卡塔尔世界杯组委会收到了葡萄牙足协提交的26人初选名单,葡萄牙也成为第五支向卡塔尔提交初选名单的球队。此前被利物浦官方宣布伤缺的若塔最终还是没能进入大名单,若塔申花与鲁能的比赛还没开打,就接二连三收到喜讯,或因此双杀鲁能日前,申花正在主帅吴金贵的带领下,全力备战与鲁能的比赛。双方在首回合的较量中,申花意外爆冷战胜了鲁能,让很多球迷都对球队刮目相看。只是,申花在战胜鲁能之后,似乎元气大伤,接连遭遇连等待北京马拉松的人作者郭儒逸来源商业人物(IDbizleaders)从天安门前几万人起跑,对马拉松爱好者来说,那种感觉是无比热烈澎湃的。现在时隔两年,他们将再次重温这样的氛围。壹看到手机弹窗推送的消卡塔尔世界杯32强巡礼三进决赛的无冕之王,守强于攻的橙色风暴荷兰,在过去的10届世界杯,荷兰有5次打进4强,3次打入最后的决赛,3次都和冠军擦肩而过,号称世界杯的无冕之王。在四小天鹅最后一员的罗本退出国家队,这支橙色荷兰完成了时代的更新,好宏远开练!马尚带头表率疯狂撸铁埃利斯加练中投全队恶补一大短板北京时间11月4日,广东宏远全队集合训练,积极备战2223赛季CBA常规赛第二阶段的比赛。4日当天,除了杜锋徐杰赵睿任骏飞等国家队球员之外,其他队员悉数到场,这段时间的训练主要是由耻辱3连输!王楚钦一败涂地,遭3大省队选手绝杀,马龙刘国梁错了北京时间11月5日,全锦赛已经进行到了四强阶段,男团的4强出炉,最终樊振东和林高远分别带着他们的上海队和广东队成功晋级了。可是也有一个争冠的大热门球队却提前出局,那就是王楚钦带领的第94分钟绝杀,哈兰德点射制胜!10人曼城21,超阿森纳1分登顶今天凌晨,英超联赛第15轮一场焦点战上演,曼城主场21击败富勒姆,超越阿森纳登顶!本场比赛,阿尔瓦雷斯上半场破门,随后坎塞洛被判红点套餐,佩雷拉主罚点球扳平,下半场哈兰德的头球破门有你真好,缘来不易一起迎接美好的一天。新的一天,愿你活力满满,信心十足。随遇而安,轻松慢活。花开一季,人活一世,开开心心过好每一天。人生无完美,曲折也是风景。生活不攀比,快乐做自己,凡事都知足,人生世界上的成功等于肮脏我想跟那些渴望成功的人,还有怀才不遇的人说,这个世界上的成功等于肮脏,没有例外。我只是一个非常客观的观察,并不是出于任何的感情色彩。我对于成功的人也没有任何意见,他们只是在这个世界
夫妻之间一方得肝癌晚期会传染给老婆或者老公吗?夫妻之间一方得肝癌,不会传染给老婆或者老公,不管是早期肝癌还是晚期肝癌,这个答案是非常明确的,肯定不会传染,癌症不会传染,不用担心,完全不用顾虑。有的人会说,肝癌不是乙肝病毒引起的王治郅的母亲为何会因为让王治郅去八一队打球,被罚去当门卫呢?大家见过身高低于1米9的中锋吗?即使在已经全面进入小球时代的NBA也没出现过这么矮的中锋,但是在我国篮球历史上却出现了一位身高只有1米88的传奇中锋,她叫任焕贞,她不仅是北京队的中退休后第一次开工资怎么跟应开工资对不上?这种情况应该是不存在的,如果有疑问应该及时到当地社部门去咨询,别人是不会知道其中的原因的,如果这个疙瘩解不开,会成为一个永远的疑问,还是赶快去自己咨询社保局的工作人员吧。第一,退休广东中山普工的工资怎么样,值得去吗?中山是一座历史悠久的文化名城,国父孙中山就是中山人,故居在中山南朗,环境幽雅,古朴而宁静,中山比邻珠海,深圳,东莞,地处国家建设的大湾区,交通便利,中山以古镇的灯饰,沙溪的红木家具减肥餐早上鸡蛋吃到饱,中午鸡肉(不吃皮)或者牛肉吃到饱,晚上黄瓜或者西红柿这样吃科学吗?早上鸡蛋吃到饱,中午鸡肉(不吃皮)或者牛肉吃到饱,晚上黄瓜或者西红柿吃到饱这样的饮食其实一点都不稀罕,就是高蛋白质低碳水化合物减肥法,加上不吃晚饭减肥法的一个组合。鸡蛋去皮鸡肉牛肉早餐一个鸡蛋,午餐一个水果,过午不食,晚上跑步,对于减肥是否可行?减肥我还有点经验,我从120公斤减到90公斤,目前没有反弹,减肥用咱们老百姓的话说就是,管住嘴,迈开腿,如果早上吃一个鸡蛋,中午吃一个水果,晚上跑步,你肯定会瘦,而且会瘦得很快,但你觉得王晓晨和江疏影谁更适合做胡歌的女朋友?江疏影和老胡非常般配。在深度人物访谈星月对话中,江疏影曾谈及该话题。主持人情感和婚姻上,父母给你会有一些压力吗?江疏影我以前是不会的,但我爸以前是属于那种,因为可能爸爸对女儿还是有炉石传说有哪些内测时期被删除的卡牌?大家好!我是炉石闲说,为您分享炉石魔兽故事!炉石传说内测时期有许多充满想象力的卡牌和有意思的效果,但是都因为影响游戏平衡或者设定不合理而被删除。接下来给大家分享下那些活不过内测时期为什么广东人把黄瓜叫做青瓜?我一直不明白除两广以外省份的人一直把青瓜叫黄瓜,由我有记忆起我们都是黄瓜叫黄瓜,青瓜叫青瓜,这是两个不同的品种。黄瓜皮黄且短粗,青瓜皮青瘦长带短刺,两种瓜从外观上就很好区分,但两种明天新疆与辽宁的比赛,新疆会不会像山西一样爆冷战胜辽宁?新疆队的关键问题是主教练阿的江思想僵化,教练套路老化,无力指导该队应变场上局面。如果新疆队不换主教练,不要说胜辽宁这样强队,恐怕连CBA目前排名后5位的队伍都难胜。现在的新疆队能赢巴萨当年为何愿意为13岁患有侏儒症的梅西支付天价治疗费用?梅西,当今足坛最伟大的球星,和C罗并称当代绝代双骄。相比C罗,梅西的足球生涯是坎特的,如果梅西是生活在我们身边,或许梅西现在只是个普通上班族,和足球没有多大的关联。幸运的是,当年得