Подтвердить что ты не робот

ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter и UITypeEditor

Я пытаюсь получить общее представление о том, как вы используете ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter и UITypeEditor, чтобы изменить, как PropertyGrid отображает и взаимодействует с объектом.

Может ли кто-нибудь сказать мне, правильно ли это, или если я пропустил какие-либо основные концепции или точки? Я просто пытаюсь понять, почему и когда вы будете использовать каждый класс.

ICustomTypeDescriptor

  • Реализация этого интерфейса в классе totaly переопределяет собственные свойства класса и заменяет их PropertyDescriptors, возвращаемыми ICustomTypeDescriptor.GetProperties()

TypeDescriptionProvider

  • Используется для расширения существующих свойств класса
  • ТипDescriptionProvider добавляется к классу через атрибут TypeDescriptionProvider
  • Метод GetTypeDescriptor() для TypeDescriptionProvider возвращает ICustomTypeDescriptor как прилагаемый к существующим свойствам типа.
  • PropertyGrid покажет как свойства класса, найденного через Reflection, так и свойства, добавленные в класс через TypeDescriptionProvider

TypeConverter

  • Преобразование между типами
  • С точки зрения использования ProphetGrid, используемого для преобразования между сложными типами и примитивными типами, которые могут отображаться/редактироваться в сетке свойств.
  • Метод значений GetStandard для TypeConverter также может использоваться для отображения списка возможных значений в свойствах

UITypeEditor

  • Определяет настраиваемый редактор для управления свойством сложного типа.
  • Связано с свойством через атрибут.

Таким образом, ICustomTypeDescriptor провайдер TypeDescription используется для добавления/изменения/замены целых свойств объектов. TypeConverter и UITypeEditor применяются к отдельным свойствам и контролируют взаимодействие этих конкретных свойств.

4b9b3361

Ответ 1

Tweaks:

  • TypeDescriptionProvider

    • все еще заменяет метаданные (не распространяется)
    • также можно добавить TypeDescriptor.AddProvider
    • может применяться как для каждого типа, так и для каждого экземпляра, что позволяет применять к спискам без необходимости выполнять ITypedList
  • TypeConverter

    • для PropertyGrid, это также механизм, используемый для получения метаданных; обратите внимание, что ExpandableObjectConverter просто делегирует TypeDescriptor.GetProperties, но это не всегда так.
    • также отвечает за воссоздание неизменяемых объектов (таких как структуры) с изменениями
  • UITypeEditor

    • также отвечает за покраску окна предварительного просмотра в PropertyGrid

Дополнительно:

  • IExtenderProvider - добавляет свойства; это может быть то, что вы путаете с TypeDescriptionProvider
  • ITypedList - широко близнец ICustomTypeDescriptor, но для списков; можно избежать с помощью TypeDescriptionProvider и индексатора без объектов на любом IList, т.е. public T this[int index] {get;}
  • IListSource - обеспечивает косвенность между источником данных и данными; например, DataTable реализует IListSource, возвращая DefaultView по запросу