Tweaks:
-
TypeDescriptionProvider- still replaces metadata (not extends)
- can also be added be
TypeDescriptor.AddProvider - can be applied per-type as well as per-instance, making it possible to apply to lists without having to implement
ITypedList
-
TypeConverter- for
PropertyGrid, this is also the mechanism used to obtain metadata; note thatExpandableObjectConvertersimply delegates toTypeDescriptor.GetProperties, but this is not always the case - also responsible for re-creating immutable objects (such as structs) with changes
- for
-
UITypeEditor- also responsible for painting the preview box in
PropertyGrid
- also responsible for painting the preview box in
Additional:
IExtenderProvider– appends properties; this may be what you were getting confused withTypeDescriptionProviderITypedList– broadly the twin ofICustomTypeDescriptor, but for lists; can be avoided by use ofTypeDescriptionProviderand a non-object indexer on anyIList, i.e.public T this[int index] {get;}IListSource– provides indirection between a data-source and the data; for example, aDataTableimplementsIListSource, returningDefaultViewwhen requested