如何在组合框C#WPF

时间:2018-12-17 13:54:47

标签: c# wpf combobox

我正在使用小型wpf应用程序,我需要将枚举加载到我的组合框中,以使用户在添加新产品时可能会选择这样的可能性:

我的枚举:

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不提供Value,所以我可以将其转换为整数并存储到db?

1 个答案:

答案 0 :(得分:1)

给出以下提取属性值的方法:

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的{​​{1}}属性中获取当前选择的枚举值:

ComboBox