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;
            }
        }
    }
  • 相关阅读:
    npm 安装卸载模块 & ionic插件安装与卸载
    Vue中v-model解析、sync修饰符解析
    Vue props用法详解
    vue页面跳转
    Swift 4 中的泛型
    Swift枚举的全用法
    蓝牙 BLE 三种 UUID 格式转换
    SVG图案
    SVG渐变
    SVG坐标系统及图形变换
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4184082.html
Copyright © 2011-2022 走看看