Если необходимо измениться, как Вы получаете X и Y в этом случае, Вы могли просто добавить свойства позже. Это - то, что я нахожу наиболее сбивающими с толку. При использовании общедоступных членских переменных можно легко изменить это на свойство позже и использовать частные переменные, названные _x и _y, если необходимо сохранить значение внутренне.
Оператор for ... in
предназначен для использования для перебора свойств объекта , t быть редактируемым, и это нормально, потому что CanConvertFrom вернет false. ЕСЛИ вы удалите преобразователь типов, PropertyGrid будет использовать общий TypeConverter, и вы снова в том же случае. Таким образом, обходной путь состоит в том, чтобы прикрепить более умный TypeConverter, который будет действовать как оболочка для правильного TypeConverter. Вот грязный (у меня было не так много времени, вы доделаете его по мере необходимости, так как я только что реализовал часть ConvertFrom):
public class MySmartExpandableObjectConverter : ExpandableObjectConverter
{
TypeConverter actualConverter = null;
private void InitConverter(ITypeDescriptorContext context)
{
if (actualConverter == null)
{
TypeConverter parentConverter = TypeDescriptor.GetConverter(context.Instance);
PropertyDescriptorCollection coll = parentConverter.GetProperties(context.Instance);
PropertyDescriptor pd = coll[context.PropertyDescriptor.Name];
if (pd.PropertyType == typeof(object))
actualConverter = TypeDescriptor.GetConverter(pd.GetValue(context.Instance));
else
actualConverter = this;
}
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
InitConverter(context);
return actualConverter.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
InitConverter(context); // I guess it is not needed here
return actualConverter.ConvertFrom(context, culture, value);
}
}
Дайте мне знать, если вам нужно что-то доработать.
Николас
Remove the "TypeConverter" from property "Value", the propertygrid will read the the "TypConverter" from typeo of value which is in property.