Вставьте настраиваемый TypeConverter в свойство во время выполнения из настраиваемого UITypeEditor

Я создал собственный UITypeEditor.

Могу ли я вставить атрибут, который также присоединяет TypeConverter к моему свойству из внутри класса UITypeEditor?

Я пробовал следующее, но ничего не получается, как ни крути, ни крути:

Attribute[] newAttributes = new Attribute[1];
newAttributes[0] = new TypeConverterAttribute(typeof(BooleanConverter));

Теперь к приведенному выше должно быть как-то прикреплено следующее:

TypeDescriptor.AddAttributes(context.Instance.PROPERTYNAME, newAttributes);

... но, во-первых, я не знаю, как добраться до рассматриваемого свойства обычным способом, и весь код, который я пробую, терпит неудачу. Даже если я попытаюсь назначить TypeConverter таким образом глобально, это не удастся. (Хотя установка его в качестве атрибута в самом свойстве работает, просто чтобы исключить ошибку в этой части.)


person Pedery    schedule 29.03.2010    source источник


Ответы (1)


TypeDescriptor позволяет добавлять атрибуты (по крайней мере, в отношении System.ComponentModel) к типам и объектам, но не к определенным свойствам. Для этого (в общем случае потребуется TypeDescriptionProvider - однако имейте в виду, что это нетривиальная вещь для реализации, и вам нужно написать все:

  • сам провайдер
  • an ICustomTypeDescriptor
  • PropertyDescriptor для вещей, которыми вы хотите манипулировать

Это PropertyDescriptor, который позволит вам притвориться, что у вас есть дополнительные атрибуты (или, через override, изменить Converter более напрямую, не вмешиваясь в атрибуты).

person Marc Gravell    schedule 29.03.2010
comment
Ах да, это все объясняет. И поскольку я хотел избежать повторного создания PropertyDescriptor, я, вероятно, буду придерживаться старых способов использования атрибутов. Похоже, слишком хлопотно сэкономить одну строчку кода на нескольких свойствах. Спасибо! - person Pedery; 29.03.2010