• [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;
            }
        }
    }
  • 相关阅读:
    在WM中画个带有边框的Panel
    在PPC上安装SQL Mobile库
    利用SQL语句清理日志
    Asp.net Ajax 中的脚本错误: Sys未定义的解决方法
    python搭建简易服务器
    STL源码剖析读书笔记第3章
    mongodb 查找 排序 索引 命令
    STL源码剖析读书笔记第2章
    词排序
    关于淘宝直通车优化的一点感悟
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4184082.html
Copyright © 2020-2023  润新知