投稿では、列挙値のカスタム文字列フォーマットを使用して列挙バインドコンボボックスを作成するにはどうすればよいですか?列挙型にスペースを設定する方法は、コンボボックスを文字列値にバインドするときに使用できるスペースを追加できるように、列挙型値に説明を追加する方法を示しています。私の場合、このコンボボックスの選択されたアイテムは別のコントロールにもバインドされています。そのリンクで見つけたソリューションを使用すると、取得している選択したアイテムの値は、スペースを除いた列挙型の値のままです。
私の列挙型は次のようになります
[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;
}
}
ここで何かが足りないのですが、コンボボックスで選択したアイテムを列挙値の説明の値にする方法を教えてください。私はまた、代替案を受け入れています。