加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[WPF系列]-DataBinding 枚举类型数据源

发布时间:2020-12-14 04:33:35 所属栏目:大数据 来源:网络整理
导读:原文: [WPF系列]-DataBinding 枚举类型数据源 public class EnumerationDataProvider : ObjectDataProvider{ public Type EnumerationType { get ; set ; } public string NoneValue { get ; set ; } public string NoneDisplayValue { get ; set ; } public
原文: [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;
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读