ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter и UITypeEditor - PullRequest
37 голосов
/ 15 апреля 2009

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

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

ICustomTypeDescriptor

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

TypeDescriptionProvider

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

TypeConverter

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

UITypeEditor

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

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

1 Ответ

37 голосов
/ 15 апреля 2009

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 при запросе
...