zoukankan      html  css  js  c++  java
  • [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;
            }
        }
    }
  • 相关阅读:
    如何设定测试目标
    转载:Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
    Jenkins启动时报错:java.net.BindException: Address already in use: bind 解决方法
    [转载]Robotium API 翻译(三)——判断测试结果的方法assert、is、search
    什么样的项目适合开展自动化测试
    Python基础11- 函数之自定义函数
    Python基础10- 函数之内部函数与强制转换
    Android获取APK包名的几种方法
    Python基础9- 字典
    回归测试策略
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4184082.html
Copyright © 2011-2022 走看看