wpf企业应用之带选项框的TreeView
wpf里面实现层次绑定主要使用HierarchicalDataTemplate,这里主要谈一谈带checkbox的treeview,具体效果见 wpf企业级开发中的几种常见业务场景。
先来看一下我的控件绑定,我这里实现的是模块权限的编辑。具体效果就是选中一个节点,后代节点、祖代节点状态都会发生相应变化,具体变化逻辑大家都懂的,描述起来很罗嗦。
<TreeView Name="TreeView_Right" ItemsSource="{Binding ModuleRight}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type localModel:ModuleRight}" ItemsSource="{Binding ModuleChildren}">
<CheckBox IsThreeState="{Binding IsThreeState}" Content="{Binding MenuName}" IsChecked="{Binding IsChecked}" IsEnabled="{Binding IsEnabled}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem" BasedOn="{StaticResource TreeViewItemStyle}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=OneWay}"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
下面是对应的绑定类,仅供参考。这里需要说明的就是,IsChecked每次变化时都要递归去修改父节点、子节点的IsChecked属性,其他的跟普通的treeview绑定没什么区别,读者若有不明之处可自行去MSDN上查看treeview的使用。
public class ModuleRight : NotifyModelBase
{
private ModuleRight _parent;
public ModuleRight Parent
{
get
{
return _parent;
}
set
{
_parent = value;
OnPropertyChanged("Parent");
}
} private string _menuName;
public string MenuName
{
get
{
if (AppSetting.GetValue("language") == "en_us")
return MenuName_EN;
return _menuName;
}
set
{
_menuName = value;
}
}
public string MenuName_EN
{
get;
set;
} public string ClassName
{
get;
set;
}
private List<ModuleRight> _moduleChildren;
public List<ModuleRight> ModuleChildren
{
get
{
return _moduleChildren ?? (_moduleChildren = new List<ModuleRight>());
}
set
{
_moduleChildren = value;
}
}
private int _rightValue;
public int RightValue
{
get
{
return _rightValue;
}
set
{
_rightValue = value;
}
} private bool _isThreeState;
public bool IsThreeState
{
get
{
return _isThreeState;
}
set
{
_isThreeState = value;
OnPropertyChanged("IsThreeState");
}
}
private bool _isEnabled = true;
public bool IsEnabled
{
get
{
return _isEnabled;
}
set
{
_isEnabled = value;
OnPropertyChanged("IsEnabled");
}
} private bool? _isChecked = false;
public bool? IsChecked
{
get
{
return _isChecked;
}
set
{
SetIsChecked(value, true, true);
}
} public bool IsExpanded
{
get
{
return _isChecked != false;
}
} public void SetIsChecked(bool? value, bool updateChildren, bool updateParent)
{
_isChecked = value;
if (updateChildren && _isChecked.HasValue)//设置后代节点的选中状态
{
ModuleChildren.ForEach(c => c.SetIsChecked(_isChecked, true, false));
}
if (updateParent && Parent != null && Parent.IsThreeState)//设置祖代节点的选中状态
{
Parent.VerifyCheckState();
}
OnPropertyChanged("IsChecked");
} public void VerifyCheckState()
{
bool? state = true;
for (int i = ; i < ModuleChildren.Count; i++)
{
bool? current = ModuleChildren[i].IsChecked;
if (current == null)
{
state = null;
break;
}
else
{
if (i < ModuleChildren.Count - && ModuleChildren[i].IsChecked != ModuleChildren[i + ].IsChecked)
{
state = null;
break;
}
}
}
if (state != null)
state = ModuleChildren[].IsChecked;
SetIsChecked(state, false, true);
} public ModuleRight()
{
}
public ModuleRight(string menuName, string menuName_en, string className)
{
this.MenuName = menuName;
this.MenuName_EN = menuName_en;
this.ClassName = className;
} }
wpf企业应用之带选项框的TreeView的更多相关文章
- iOS webview加载html自定义选项框选词
项目要求:webview加载html网址,内容为英文文本,需要获取文本上的单词 这个是最终效果图: 思路是先实现自定义的选项框(不带系统选项)再获取到滑选的单词: 实现的步骤: 首先是替换掉系统长按出 ...
- 带搜索框的jQuery下拉框插件
由于下拉框的条数有几十个,于是打算找一个可以搜索查找功能的下拉框,刚开始在网上看了几个,都是有浏览器兼容性问题,后来看到这个“带搜索框的jQuery下拉框美化插件 searchable”,看演示代码简 ...
- wpf实现仿qq消息提示框
原文:wpf实现仿qq消息提示框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/5052 ...
- [js开源组件开发]模拟下拉选项框select
模拟下拉选项框select 在css3流行的情况下,下拉框还是无法满足PD的需求,所以有了autosearch,有了模拟下拉框.效果如下图: select DEMO请案例点击这里查看.http://w ...
- css2----实现三角形和带角框
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- MIUI选项框开关样式模拟
有IOS的开关模拟,当然也有MIUI的开关模拟 看到设置选项里面的开关样式,突发奇想地来试试 最终效果如图: 实现过程 1. 选项框checkbox 模拟开关当然需要一个选项框,这里用到了复选框 ...
- Android弹出选项框及指示箭头动画选择
Android弹出选项框及指示箭头动画选择 Android原生的Spinner提供了下拉列表选项框,但在一些流行的APP中,原生的Spinner似乎不太受待见,而通常会有下图所示的下拉列表选项框 ...
- C# WPF 解压缩7zip文件 带进度条 sevenzipsharp
vs2013附件 :http://download.csdn.net/detail/u012663700/7427461 C# WPF 解压缩7zip文件 带进度条 sevenzipsharp W ...
- Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框
作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节.交流QQ群:[编程之美 365234583]h ...
随机推荐
- 2015.07.15——prime素数
prime素数 1.素数也叫质数,定义是一个数只能被1和它自身整除. 素数从2开始,0,1都不是素数. 2.素数的判断(C++) 3.给定某个数,求小于这个数的所有素数 2.素数的判断(C++) bo ...
- replication-manager 搭建
replication-manager 搭建 介绍 replication-manager 主要用于mysql主从结构的监控和主从切换. 安装 vi /etc/yum.repos.d/signal18 ...
- MVVM模式View和ViewModel的通信
还需要些什么呢 在前面几篇博客中我们尝试去实现了MVVM中的数据绑定.命令绑定和事件绑定.貌似实现的差不多了.我最早尝试用MVVM去开发的时候也是这么想的,没有用第三方框架,甚至只是实现了数据绑定和命 ...
- 数据结构之队列(Python 版)
数据结构之队列(Python 版) 队列的特点:先进先出(FIFO) 使用链表技术实现 使用单链表技术,在表首尾两端分别加入指针,就很容易实现队列类. 使用顺序表list实现 # 队列类的实现 cla ...
- python网络编程-协程(协程说明,greenlet,gevent)
一:什么是协程 协程(Coroutine):,又称微线程.协程是一种用户态的轻量级线程.是由用户自己控制,CPU根本不知道协程存在. 协程拥有自己的寄存器上下文和栈. 协程调度切换时,将寄存器上下文和 ...
- python网络编程--线程GIL(全局解释器锁)
一:什么是GIL 在CPython,全局解释器锁,或GIL,是一个互斥体防止多个本地线程执行同时修改同一个代码.这把锁是必要的主要是因为当前的内存管理不是线程安全的.(然而,由于GIL存在,其他特性已 ...
- js中的盒子模型
说到盒子模型,你第一时间会想到css盒子模型,css中的盒子模型包括(内容区+内边距+边框).那在js中怎么去获取这些属性值呢?下面一起来学习js中的盒子模型. css样式 body { margin ...
- 洛谷P3621风铃
传送门啦 分析: 这个题看起来像是个树形dp,嗯,就是看起来像. 所以我们就按树形dp的思路去分析就好了,这个题是一个树形dp的变形题. 和以前建树是一样的,我们用邻接表来进行储存.利用邻接表的特性, ...
- AdvStringGrid 垂直居中 、水平居中
官网faq,解答: 结果:
- Java--Jackson转换Date,Timestamp 到格式化字符串
package com.diandaxia.test; import java.sql.Timestamp; import java.util.Date; /** * Created by del-b ...