【发布时间】:2025-12-23 06:10:06
【问题描述】:
在How do I have an enum bound combobox with custom string formatting for enum values? 和How to set space on Enum 的帖子中展示了如何向枚举值添加描述,以便能够添加空格,这在将组合框绑定到字符串值时可用。我的情况是这个组合框的选定项也绑定到另一个控件。 使用我通过该链接找到的解决方案,我得到的所选项目的值仍然是没有空格的 Enum 的值。
我的枚举如下所示
[TypeConverter(typeof(EnumToStringUsingDescription))]
public enum SCSRequestType {
[Description ("Change Request")]
ChangeRequest = 4,
[Description("Documentation")]
Documentation = 9,....
}
我也在使用下面的类型转换器。
public class EnumToStringUsingDescription : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return (sourceType.Equals(typeof(Enum)));
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
{
return (destinationType.Equals(typeof(String)));
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if (!destinationType.Equals(typeof(String)))
{
throw new ArgumentException("Can only convert to string.", "destinationType");
}
if (!value.GetType().BaseType.Equals(typeof(Enum)))
{
throw new ArgumentException("Can only convert an instance of enum.", "value");
}
string name = value.ToString();
object[] attrs =
value.GetType().GetField(name).GetCustomAttributes(typeof(DescriptionAttribute), false);
return (attrs.Length > 0) ? ((DescriptionAttribute)attrs[0]).Description : name;
}
}
我在这里遗漏了什么,我如何强制组合框的选定项目成为枚举值描述的值。我也愿意接受替代品。
【问题讨论】:
标签: c# wpf data-binding combobox typeconverter