• [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;
            }
        }
    }
  • 相关阅读:
    JavaScript异步编程1——Promise的初步使用
    Pailler
    ElGamal
    RSA
    密码基础
    博客园中:为文章添加版权保护
    DCT实现水印嵌入与提取(带攻击)
    量子:基于EPR块对的两步量子直接通信
    量子:拜占庭协议和测谎问题的量子协议的实验证明
    liunx:网络命令
  • 原文地址:https://www.cnblogs.com/HQFZ/p/4184082.html
Copyright © 2020-2023  润新知