我正在使用小型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";
}
这将显示,因为您可以看到我的实际值“ FinalProduct ”,而不是“ 最终销售的商品”
[StringValue("Final product for sale")]
,我想展示要出售的最终产品,因为它在组合框中看起来更自然(带有空格等)=)
感谢大家的帮助 干杯
在MM8帮助后进行编辑:
我怎么能从中获得实际值,将其转换为整数,因为枚举值分别为0、1、2、3等:
但是articleType不提供Value,所以我可以将其转换为整数并存储到db?
答案 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