Вопрос

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

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

ICustomTypeDescriptor

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

ТипОписаниеПоставщик

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

ТипКонвертер

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

Редактор UIType

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

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

Это было полезно?

Решение

Твики:

  • 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 по запросу
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top