How to pass a parameter to a TypeConverter derived class

I would like to pass some parameter to a class derived from TypeConverter. Please tell me how can I do this? For example, I have this class:

public class DDlExample { [TypeConverter(typeof(ExClassConverter))] public int Bounds { get; set; } } class ExClassConverter : TypeConverter { public int FirstParam{get;set;} ... } 

I would like to pass the value of FirstParam as follows:

 public class DDlExample { [TypeConverter(typeof(ExClassConverter), ***FirstParam=2***)] public int Bounds { get; set; } } 

Is it possible?

This task seems to have no solution. I will try to repeat the problem. I have one class derived from TypeConverter and I apply it to other properties to display dropdown lists of different values. How to determine which properties from ExClassConverter : TypeConverter populate a drop-down list with the corresponding values?

 [AttributeUsage(AttributeTargets.Property,AllowMultiple=true,Inherited=true)] public class ParamDesc:Attribute { public ParamDesc(int PD) { DictID = PD; } public int DictID { get; set; } } public class DDlExample { [ParamDesc(1)] [TypeConverter(typeof(ExClassConverter))] public int Bounds { get; set; } [ParamDes(2)] [TypeConverter(typeof(ExClassConverter))] public int Rounds { get; set; } } class ExClassConverter : TypeConverter { private List<string> LSValues1 = new List<string>(new string[] {"first","second","third"}); private List<string> LSValues2 = new List<string>(new string[] {"apple","melon","grapes"}); public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) return true; return base.CanConvertFrom(context, sourceType); } public override bool CanConvertTo(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(int)) return (sourceType == typeof(int)?true:false); return base.CanConvertTo(context, sourceType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destType) { if (value is int) { return LSValues1[(int)value]; } return base.ConvertTo(context, culture, value, destType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { return LSValues1.IndexOf(value.ToString()); } return base.ConvertFrom(context, culture, value); } public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; } public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection svc = new StandardValuesCollection(LSValues1); return svc; } } 
+6
source share
2 answers

I solved the problem. I used ITypeDescriptorContext context with the ConvertTo and ConvertFrom methods:

 if (context != null) { AttributeCollection ua = context.PropertyDescriptor.Attributes; ParamDesc cca = (ParamDesc)ua[typeof(ParamDesc)]; if (cca != null) System.Console.WriteLine("Attribute value is " + cca.DictID.ToString()); } 
+7
source

Old question, but ...

For a complete solution to the problem, which seems to be an OP problem: just check the name of the property that the type converter accesses. For instance,

 public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { StandardValuesCollection svc; if (context.PropertyDescriptor.Name == "Bounds") svc = new StandardValuesCollection(LSValues1); else if (context.PropertyDescriptor.Name == "Rounds") svc = new StandardValuesCollection(LSValues2); return svc; } 

This solution avoids the need to use an additional OP attribute for the property.

+4
source

All Articles