PropertyGrid и динамические типы объектов

Если необходимо измениться, как Вы получаете X и Y в этом случае, Вы могли просто добавить свойства позже. Это - то, что я нахожу наиболее сбивающими с толку. При использовании общедоступных членских переменных можно легко изменить это на свойство позже и использовать частные переменные, названные _x и _y, если необходимо сохранить значение внутренне.

5
задан Yael 24 December 2016 в 13:32
поделиться

2 ответа

Оператор 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);
    }
}

Дайте мне знать, если вам нужно что-то доработать.

Николас

5
ответ дан 14 December 2019 в 19:15
поделиться

Remove the "TypeConverter" from property "Value", the propertygrid will read the the "TypConverter" from typeo of value which is in property.

0
ответ дан 14 December 2019 в 19:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: