WPF привязка ListBox к перечислению, отображение атрибута описания

Можно ли использовать метод ObjectDataProvider для привязки ListBox к перечислению и как-то стилизовать его для отображения описания attriibute? Если да, то как бы это сделать …?

Да, это возможно. Это сделает это. Скажем, у нас есть перечисление

public enum MyEnum { [Description("MyEnum1 Description")] MyEnum1, [Description("MyEnum2 Description")] MyEnum2, [Description("MyEnum3 Description")] MyEnum3 } 

Затем мы можем использовать ObjectDataProvider как

 xmlns:MyEnumerations="clr-namespace:MyEnumerations" 
      

А для ListBox мы устанавливаем ItemSource в MyEnumValues ​​и применяем ItemTemplate с конвертером.

        

А в конвертере мы получаем описание и возвращаем его

 public class EnumDescriptionConverter : IValueConverter { private string GetEnumDescription(Enum enumObj) { FieldInfo fieldInfo = enumObj.GetType().GetField(enumObj.ToString()); object[] attribArray = fieldInfo.GetCustomAttributes(false); if (attribArray.Length == 0) { return enumObj.ToString(); } else { DescriptionAttribute attrib = attribArray[0] as DescriptionAttribute; return attrib.Description; } } object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) { Enum myEnum = (Enum)value; string description = GetEnumDescription(myEnum); return description; } object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return string.Empty; } } 

Метод GetEnumDescription, вероятно, должен идти куда-то еще, но вы получаете идею 🙂

Если вы связываетесь с Enum, вы, вероятно, можете преобразовать это в описание через IValueConverter.

См. Binding ComboBoxes для enums … в Silverlight! для описания того, как это сделать.

Дополнительную информацию см. На странице http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx .

Вы можете определить файл ressource в своем проекте (* .resx-файл). В этом файле вы должны определить «пары ключ-значение», что-то вроде этого:

 "YellowCars" : "Yellow Cars", "RedCars" : "Red Cars", 

и так далее…

Ключи равны вашим записям enums, что-то вроде этого:

 public enum CarColors { YellowCars, RedCars } 

и так далее…

Когда вы используете WPF, вы можете реализовать в своем XAML-коде, что-то вроде этого:

        

Тогда вы должны написать свой конвертер, что-то вроде этого:

 using System; using System.Globalization; using System.Resources; using System.Windows.Data; public class CarColorConverter : IValueConverter { private static ResourceManager CarColors = new ResourceManager(typeof(Properties.CarColors)); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var key = ((Enum)value).ToString(); var result = CarColors.GetString(key); if (result == null) { result = key; } return result; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

Мой ответ приходит 7 лет до позднего 😉 Но, может быть, он может быть использован кем-то другим!

  • Как определить структуру в Matlab
  • Разница между схемой / базой данных в MySQL
  • Зачем использовать отношения 1 к 1 в дизайне базы данных?
  • do.call (rbind, list) для нечетного числа столбцов
  • Альтернативы атрибуту-атрибуту (EAV)?
  • Нормализация в системе управления базами данных
  • В чем разница между шаблонами DAO и Repository?
  • Каковы некоторые лучшие практики и «эмпирические правила» для создания индексов базы данных?
  • Что означает набор символов и сортировка?
  • В чем преимущества использования единой базы данных для клиента EACH?
  • Будете ли вы хранить двоичные данные в базе данных или в файловой системе?
  • Давайте будем гением компьютера.