[WPF系列]-DataBinding 枚举类型数据源
public class EnumerationDataProvider : ObjectDataProvider
{
public Type EnumerationType { get; set; } public string NoneValue { get; set; } public string NoneDisplayValue { get; set; } public EnumerationDataProvider()
{
this.MethodName = "GetEnumerations";
this.ObjectType = typeof(EnumerationHelper);
} protected override void EndInit()
{
this.MethodParameters.Clear();
this.MethodParameters.Add(this.EnumerationType);
this.MethodParameters.Add(this.NoneValue);
this.MethodParameters.Add(this.NoneDisplayValue); base.EndInit();
} private static class EnumerationHelper
{
private const string NoneDefaultValue = "None";
private const string NoneDisplayDefaultValue = ""; public static IDictionary<object, string> GetEnumerations(
Type enumType, string noneValue, string noneDisplayValue)
{
// Setup defaults if none exists.
if (string.IsNullOrWhiteSpace(noneValue)) noneValue = NoneDefaultValue;
if (string.IsNullOrWhiteSpace(noneDisplayValue)) noneDisplayValue = NoneDisplayDefaultValue; IDictionary<object, string> items = new Dictionary<object, string>(); // Find the None enumeration value.
string noneStringValue = (from n in Enum.GetNames(enumType)
where string.Compare(n, noneValue, StringComparison.OrdinalIgnoreCase) == 0
select n).FirstOrDefault(); bool hasNoneValue = !string.IsNullOrWhiteSpace(noneStringValue); object noneEnumerationValue = null;
if (hasNoneValue)
{
// Parse the None value if it exists and add it as the first item.
noneEnumerationValue = Enum.Parse(enumType, noneStringValue, true);
items.Add(noneEnumerationValue, noneDisplayValue);
} // Select all enumeration values where not equal to the None value and order by
// the enumeration value name.
var orderedEnums = from v in Enum.GetValues(enumType).Cast<object>()
where !v.Equals(noneEnumerationValue)
orderby Convert.ToString(v) select v; foreach (var value in orderedEnums)
items.Add(value, Convert.ToString(value)); return items;
}
}
}
[WPF系列]-DataBinding 枚举类型数据源的更多相关文章
- [WPF系列]-DataBinding(数据绑定) 自定义Binding
自定义Binding A base class for custom WPF binding markup extensions BindingDecoratorBase Code: public c ...
- WorldWind源码剖析系列:枚举类型
PluginSDK中的枚举型主要有以下这些: public enum AltitudeMode//高度模式枚举 { ClampedToGround,//强制到地面模式 RelativeToGround ...
- [WPF系列]-DataBinding 绑定计算表达式
Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualWidth, Converter={Stat ...
- 在WPF中使用变通方法实现枚举类型的XAML绑定
问题缘起 WPF的分层结构为编程带来了极大便利,XAML绑定是其最主要的特征.在使用绑定的过程中,大家都普遍的发现枚举成员的绑定是个问题.一般来说,枚举绑定多出现于与ComboBox配合的情况,此时我 ...
- .net MVC 中枚举类型Enum 转化成 下拉列表的数据源
第一次写技术博文,记录下工作中遇到的问题,给自己的知识做个备份,也希望能帮助到其他的同学 最近接手了公司的一个新的项目.有个页面涉及相关设计. 分享一个经常用到的吧. 方法一: 直入主题吧 我们的目的 ...
- 【C#进阶系列】15 枚举类型和位标志
实际上本章就只讲枚举类型,因为位标志本来就可以当做一个特殊的枚举类型. 关于枚举类型 枚举类型是一种消灭魔法数字的好方法,使程序更容易编写,阅读和维护. 枚举类型是值类型,然而有别于其它值类型,枚举类 ...
- Python3基础系列——枚举类型大揭秘
为什么使用枚举 枚举类型是定义常量的一种最优选择. 常量的广义概念是:不变化的量 对于常量的通俗比喻--如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的 ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
- [WPF系列]-数据邦定之DataTemplate 对分层数据的支持
到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示 ...
随机推荐
- entity framework 5 批量增删改效率优化
对于数据的批量增删改最慢的就是操作一条就提交一次事务. 以下是对增删改操作的优化测试 同样的300条数据 批量新增只提交一次事务 用时:10673.5444ms 批量新增只提交一次事务并把contex ...
- Autofac - 程序集扫描
通过程序集扫描, 能够自动注册符合规则的类型. 这种方式, 很方便. 这一篇就介绍下程序集扫描吧. 一.扫描 其实前面已经介绍过, 这种方式. 不过并不全. 先看一个之前的方式: var builde ...
- 【nodejs笔记4】搭建多人博客<内含http请求的get post方法区别>
功能分析 博客具有四个功能:注册 登录 登出 发表文章 界面设计 未登录: [主页 注册页 登录页] [主页] 主页 左侧 HOME ...
- Linux中shell脚本自动输入密码
最近遇到蛋疼的事,就是在shell脚本中需要获取root权限,因此在shell脚本运行过程中需要输入密码. 懒惰的我当然想让shell在执行过程中就可以自动输入密码,这样就可以抽空看看妹子图.. 我通 ...
- 前端工程师如何快速的开发一个微信JSSDK应用
亲们,订阅号出来已经很久了,作为一个前端工程师或者全栈工程师,你是不是错过了什么?大概许多攻城狮同砚还没有反应过来订阅号怎么回事,就马上要被微信的应用号秀一脸了.在应用号还没有正式出来之前,我们赶紧一 ...
- file_put_contents 错误:failed to open stream: Invalid argument 一种原因
今天在测试nilcms系统的时候,出现了一个报错,导致缓存无法更新: file_put_contents(C:\UPUPW_AP5.4\vhosts\d.tv\NilCMS_APP\include_r ...
- Mvc视图的那些事
最近参与项目底层重写,在代码组织方式,类型使用上已经与之前有了很大的不同,这里总结一下视图的使用. 一.视图中命名空间的使用 视图命名空间的使用方式大致有三种:一,完全限定名,如 @System.Da ...
- jQuery构造函数init参数分析(一)
在我的上一篇随笔里面分析了jQuery的构造函数,jQuery对象中有一个原型方法init才是是真正的构造函数,通过init的原型对象跟jQuery的原型对象保持引用关系使得init的实例可以正常调用 ...
- JS中用new创建对象与不用new创建对象区别:
function classA() { console.log(this); var that = this == window ? {} : this; that.name = "clas ...
- iOS GCD的 一次性执行、定时器、迭代、队列组