在使用 PropertyGrid 控件中,有时候我们在属性的上面添加类型转换特性
(TypeConverterAttribute) 来自定义下拉选项。
这个时候,我们可能会有这样的要求,一个属性的改变会导致另一个属性的候选项发生改变,也就是说,我们需要为特定属性设置动态的下拉选项。
此处以 StringConverter 为例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| public class RebarDiameterConverter:StringConverter { private List<string> _diameters = new List<string>() { "φ8","φ10","φ12", "φ14", "φ16", "φ18", };
public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; }
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { if(context!=null && context.Instance is ISwRebarProperty rebar) { _diameters = swOpenRoadsSDK.ParseSpecificationXml.Instance.GetSpecifications(rebar.FeatureName); } return new StandardValuesCollection(_diameters.ToArray()); }
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) { return true; } }
|
在 GetStandardValues 方法中,会传递下来一个 context, 而
context.Instance
就是调用该转换器的实例,所以,将它转换成相应的对象,然后利用对象里面的值来动态生成下拉选项。