mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

Enumの値をコンボボックスに表示する(Description属性)

基本的にはDisplay属性と変わらないのでもろもろ省略する。

コンボボックスに表示するEnumをつくる

        public enum DescriptionCountry
        {
            [Description("ニッポン")]
            Japane,
            [Description("アメリカ")]
            America,
            [Description("マレーシア")]
            Malaysia
        }

Description属性のプロパティを受け取るコンバーター

DescriptionAttributeにキャストして,Descriptionプロパティを返すコンバータです。
Description属性なのでDescriptionAttributeを使うところがDisplayと違う。

    public class ComboBoxDescriptionConverter : IValueConverter
    {
        private string GetEnumDescription(Enum enumObject)
        {
            if (enumObject == null) return "";
            FieldInfo fieldInfo = enumObject.GetType().GetField(enumObject.ToString());

            object[] attributeArray = fieldInfo.GetCustomAttributes(false);

            if (attributeArray.Length == 0)
            {
                return enumObject.ToString();
            }
            else
            {
                DescriptionAttribute attribute = attributeArray[0] as DescriptionAttribute;
                if (attribute == null) return string.Empty;
                return attribute.Description;
            }
        }

        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Enum myEnum = (Enum)value;
            string description = GetEnumDescription(myEnum);
            return description;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return string.Empty;
        }
    }

完成

こんな感じになる
f:id:mogmo811:20181031173030p:plain