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 ...
随机推荐
- 17、enum简介
enum简介 在日常开发中可能有一些东西是固定的,比如一年只有4个季节,春夏秋冬.我们可以自己定义一个类里面存放这4个季节.在jdk5之后,引入了枚举(enum)的概念,可以通过enum去定义这四个季 ...
- linux命令-grep+正则表达式用法
目标文件/etc/passwd,使用grep命令或egrep 1.显示出所有含有root的行:egrep 'root' passwd 2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的 ...
- Bresenham直线算法与画圆算法
在我们内部开发使用的一个工具中,我们需要几乎从 0 开始实现一个高效的二维图像渲染引擎.比较幸运的是,我们只需要画直线.圆以及矩形,其中比较复杂的是画直线和圆.画直线和圆已经有非常多的成熟的算法了,我 ...
- solr4.10.3部署到tomcat——(十)
0. 准备环境:
- Spring4笔记6--Spring与AOP
Spring与AOP: AOP的引入: 主业务经常需要调用系统级业务(交叉业务),如果在主业务代码中大量的调用系统级业务代码,会使系统级业务与主业务深度耦合在一起,大大影响了主业务逻辑的可读性,降低了 ...
- 【codeforces】【比赛题解】#940 CF Round #466 (Div. 2)
人生的大起大落莫过如此,下一场我一定要回紫. [A]Points on the line 题意: 一个直线上有\(n\)个点,要求去掉最少的点,使得最远两点距离不超过\(d\). 题解: 暴力两重fo ...
- HDU 6212 Zuma 2017青岛网络赛 区间DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6212 解法:看了眼题就发现这个BZOJ 1032不是一毛一样?但是BZOJ上那是个巨坑,数据有错,原来 ...
- 003_Mac挂载NTFS移动硬盘读取VMware虚拟机文件
一.Mac 挂载NTFS移动硬盘进行读写操作 (Read-only file system) 注意如下图所示先卸载,然后按照下图的命令进行挂载.然后cd /opt/003_vm/ &&am ...
- IntelliJ IDEA 把Json字符串 增加到IDE里 用windows记事本 能自动转换(自动增加转义字符)
- win7下weblogic安装与部署项目调试记录
下载 weblogic12c, 官网下载通用版本 安装 略 下载jdk jdk所有版本连接 http://www.oracle.com/technetwork/java/archive-13921 ...