WPF的Treeview控件实现CheckBox
来源:互联网 发布:制作app软件下载 编辑:程序博客网 时间:2024/05/22 02:08
WPF的Treeview控件的一般用法书上都有介绍,就没必要多讲。这里主要说明TreeView里实现CheckBox。
首先构造一个Node类
public class Node : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } public Node() { this.IsSelected = false; this.Nodes = new List<Node>(); } /// <summary> /// 节点名称 /// </summary> public string NodeName { get; set; } /// <summary> /// 被删除 /// </summary> private bool isSelected = false; public bool IsSelected { set { this.isSelected = value; this.NotifyPropertyChanged("IsSelected"); } get { return this.isSelected; } } /// <summary> /// 子节点集合 /// </summary> public List<Node> Nodes { get; set; } } public enum NodeType { RootNode,//根节点 LeafNode,//叶子节点 }
接着来看一下后台数据,这里需要让TreeView的节点自动展开,并实现父节点被选,子节点全被选,父节点不选,子节点全部不选的功能(这里应该有更好的办法,我这里是用父节点的名称来判断的,对于指定的TreeView数据还好说)。
public partial class MainWindow : Window { public List<Node> nodeList { get; set; } public MainWindow() { InitializeComponent(); } private List<Node> GetNodeList() { Node leafOneNode = new Node(); leafOneNode.NodeName = "叶子节点一"; leafOneNode.Nodes = new List<Node>(); Node leafTwoNode = new Node(); leafTwoNode.NodeName = "叶子节点二"; leafTwoNode.Nodes = new List<Node>(); Node leafThreeNode = new Node(); leafThreeNode.NodeName = "叶子节点三"; leafThreeNode.Nodes = new List<Node>(); Node leafOneNode1 = new Node(); leafOneNode1.NodeName = "叶子节点1"; leafOneNode1.Nodes = new List<Node>(); Node leafTwoNode2 = new Node(); leafTwoNode2.NodeName = "叶子节点2"; leafTwoNode2.Nodes = new List<Node>(); Node leafThreeNode3 = new Node(); leafThreeNode3.NodeName = "叶子节点3"; leafThreeNode3.Nodes = new List<Node>(); return new List<Node>() { new Node(){NodeName="根节点",Nodes=new List<Node>(){leafOneNode, leafTwoNode, leafThreeNode}}, new Node(){NodeName="根节点1",Nodes=new List<Node>(){leafOneNode1, leafTwoNode2, leafThreeNode3}} }; } private void ExpandTree() { if (this.TreeView_NodeList.Items != null && this.TreeView_NodeList.Items.Count > 0) { foreach (var item in this.TreeView_NodeList.Items) { DependencyObject dependencyObject = this.TreeView_NodeList.ItemContainerGenerator.ContainerFromItem(item); if (dependencyObject != null)//第一次打开程序,dependencyObject为null,会出错 { ((TreeViewItem)dependencyObject).ExpandSubtree(); } } } } private void Window_Loaded(object sender, RoutedEventArgs e) { nodeList = GetNodeList(); this.TreeView_NodeList.ItemsSource = nodeList; ExpandTree(); } private void CheckBox_Checked(object sender, RoutedEventArgs e) { if((sender as CheckBox).Content.ToString()== "根节点") { foreach(Node item in nodeList[0].Nodes) { item.IsSelected = true; } } if ((sender as CheckBox).Content.ToString() == "根节点1") { foreach (Node item in nodeList[1].Nodes) { item.IsSelected = true; } } } private void CheckBox_Unchecked(object sender, RoutedEventArgs e) { if ((sender as CheckBox).Content.ToString() == "根节点") { foreach (Node item in nodeList[0].Nodes) { item.IsSelected = false; } } if ((sender as CheckBox).Content.ToString() == "根节点1") { foreach (Node item in nodeList[1].Nodes) { item.IsSelected = false; } } } }
前台的xaml代码:
<Grid> <TreeView Name="TreeView_NodeList"> <TreeView.Resources> <HierarchicalDataTemplate DataType="{x:Type local:Node}" ItemsSource="{Binding Nodes,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <StackPanel Orientation="Horizontal" Margin="0,2,0,2"> <CheckBox Content="{Binding NodeName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding NodeName,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" IsChecked="{Binding IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" ></CheckBox> </StackPanel> </HierarchicalDataTemplate> </TreeView.Resources> </TreeView> </Grid>
或许这里可以用Style来做,暂时解决问题先就这样,因为代码也不长。
阅读全文
0 0
- WPF的Treeview控件实现CheckBox
- WPF实现带有Checkbox选择框的TreeView树控件
- 一步步学习WPF纯后台实现带checkbox的Treeview
- TreeView控件的CheckBox自动实现父子节点递归选定
- wpf带checkbox的treeview开发
- WPF 带CheckBox、图标的TreeView
- WPF 带CheckBox、图标的TreeView
- wpf带checkbox的treeview开发
- wpf 中 带checkbox的treeview
- wpf带checkbox的treeview开发
- 实现winform中的treeview控件部分节点显示checkbox,部分节点不显示checkbox的功能
- 带 checkBox 多选框的 Treeview 控件
- 【项目】TreeView控件的CheckBox选中事件
- WPF TreeView控件使用
- C# 中TreeView 控件实现点击CheckBoX自动打钩的事件
- javacript实现TreeView中checkBox的选择
- WPF的TreeView中实现右键选定
- 采用MVVM方式实现WPF的TreeView
- Qunar全链路跟踪及Debug
- 微信小程序Xmljiexi
- Android热更新实现方式
- 课程设计 成绩管理系统
- VS运行闪退?
- WPF的Treeview控件实现CheckBox
- Window10内置Ubuntu系统 搭建TensorFlow 平台搭建
- 【android】绘制圆环的三种方式
- wait() notify使用注意事项
- VS2013 error LNK1104: cannot open file " .lib"
- Elasticsearch架构
- 分布式消息队列RabbitMQ之三:四种典型使用场景和代码示例
- 文件属性获取
- Bean 的生命周期