如何绑定带有自定义字符串格式的枚举值的ComboBox?

140

在帖子Enum ToString中,介绍了一种使用自定义属性DescriptionAttribute的方法:

Enum HowNice {
  [Description("Really Nice")]
  ReallyNice,
  [Description("Kinda Nice")]
  SortOfNice,
  [Description("Not Nice At All")]
  NotNice
}

然后,您调用一个名为GetDescription的函数,语法类似于:

GetDescription<HowNice>(NotNice); // Returns "Not Nice At All"

但是这并不能帮助我简单地使用枚举的值填充ComboBox,因为我无法强制ComboBox调用GetDescription

我想要实现以下要求:

  • 读取(HowNice)myComboBox.selectedItem将返回所选值作为枚举值。
  • 用户应该看到友好的显示字符串,而不仅仅是枚举值的名称。 因此,用户将看到“Not Nice At All”,而不是“NotNice”。
  • 希望解决方案对现有枚举代码的更改最小。

显然,我可以为每个枚举实现一个新类,并覆盖其ToString()方法,但对于每个枚举来说这都是很多工作,我宁愿避免这种情况。

有任何想法吗?

嘿,我甚至会给你一个拥抱作为赏金 :-)


1
jjnguy说得对,Java枚举类型非常好地解决了这个问题(http://javahowto.blogspot.com/2006/10/custom-string-values-for-enum.html),但这个问题的相关性值得怀疑。 - Matthew Flaschen
8
Java的枚举类型有些可笑。或许他们会在2020年添加属性:/ - Chad Grant
对于一个更轻量级(但可能不够强大)的解决方案,请参见我的帖子 - Gutblender
21个回答

-1
Enum HowNice {   
[StringValue("Really Nice")]   
ReallyNice,   
[StringValue("Kinda Nice")]   
SortOfNice,   
[StringValue("Not Nice At All")]   
NotNice 
}

Status = ReallyNice.GetDescription()

3
欢迎来到stackoverflow!为了提高帖子的准确性,最好为示例代码提供简短的描述 :) - Picrofo Software

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接