Как отобразить перечисление StringValue (заголовок) в поле со списком C # WPF - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю с небольшим wpf-приложением, и мне нужно загрузить enumation в мое поле со списком в качестве возможностей, которые пользователь может выбрать при добавлении нового продукта, и это выглядит так:

мое перечисление:

public enum ProductTypeEnum : int
{
    Unknown = 0,

    [StringValue("Final product for sale")]
    FinalProduct = 1,

    [StringValue("Ingredient for product")]
    Material = 2

}

Вот как это выглядит в моем приложении C # WPF, когда я выбираю значения для отображения в моем комбинированном списке:

var myEnums = ProductTypeEnum.GetValues(typeof(ProductTypeEnum));


if(myEnums.Length > 0)
{
    cmbArticleType.ItemsSource = myEnums;
  //cmbArticleType.DisplayMemberPath = "SOMETHING.. WHATEVER IT AINT WORKED";

}

enter image description here

И это показывает, как вы видите мои реальные значения " FinalProduct ", а не " Конечный продукт для продажи "

[StringValue("Final product for sale")]

и я хотел бы показать Конечный продукт для продажи , потому что он выглядит более естественно в выпадающем списке (с пробелами и т. Д.) =)

Спасибо, ребята, за любую помощь Приветствия

РЕДАКТИРОВАТЬ ПОСЛЕ MM8 ПОМОГАЕТ:

Как получить из этого реальное значение, приведите его к целому числу, поскольку перечисления содержат значение 0,1,2, 3 и т. Д .:

enter image description here

enter image description here

Но articleType не предоставляет значение, поэтому я мог разыгратьэто в целое число и хранить в БД?

1 Ответ

0 голосов
/ 17 декабря 2018

Учитывая следующий метод, который извлекает значение атрибута:

public static string GetStringValue(Enum value)
{
    Type type = value.GetType();
    FieldInfo fieldInfo = type.GetField(value.ToString());
    StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
        typeof(StringValueAttribute), false) as StringValueAttribute[];
    return attribs.Length > 0 ? attribs[0].StringValue : null;
}

... вы можете создавать экземпляры анонимных, которые имеют свойство Description:

cmbArticleType.ItemsSource = myEnums.OfType<ProductTypeEnum>().Select(x => new { Value = x, Description = GetStringValue(x) });
cmbArticleType.DisplayMemberPath = "Description";
cmbArticleType.SelectedValuePath = "Value";

Вы получаете текущее выбранное значение перечисления из свойства SelectedValue ComboBox:

ProductTypeEnum selectedValue = (ProductTypeEnum)cmbArticleType.SelectedValue;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...