ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter e UITypeEditor
-
09-09-2019 - |
Pergunta
Eu estou tentando obter uma compreensão geral de como você usa ICustomTypeDescriptor, TypeDescriptionProvider, TypeConverter e UITypeEditor a mudança como um PropertyGrid displays e interfaces com um objeto.
Alguém pode me dizer se isso é certo ou se eu perdi qualquer principais conceitos ou pontos? Estou apenas tentando entender por que e quando você usaria cada classe.
ICustomTypeDescriptor
- A implementação desta interface em uma classe totalmente substitui as propriedades nativas de uma classe e substitui-los com os PropertyDescriptors retornados por ICustomTypeDescriptor.GetProperties ()
TypeDescriptionProvider
- Usado para estender sobre as propriedades existentes de uma classe
- A TypeDescriptionProvider é anexado a uma classe através de um atributo TypeDescriptionProvider
- O método GetTypeDescriptor () do TypeDescriptionProvider retorna um ICustomTypeDescriptor ser Appended para as propriedades existentes do tipo.
- Um PropertyGrid irá mostrar tanto as propriedades da classe encontrado através da reflexão, e as propriedades adicionado à classe através da TypeDescriptionProvider
TypeConverter
- Converte entre tipos
- Em termos de utilização de um PropetyGrid usado para converter entre tipos complexos e tipos primitivos que podem ser exibidas / editadas na grade de propriedades.
- O método valores GetStandard de um TypeConverter também pode ser usado para mostrar uma lista de possíveis valores no PropertyGrid
UITypeEditor
- Define um editor personalizado para manipular uma propriedade de um tipo complexo.
- associado a uma propriedade através de um atributo.
Assim ICustomTypeDescriptor um provedor TypeDescription são usados ??para adicionar / alterar / substituir propriedades inteiras de objetos. TypeConverter e UITypeEditor são aplicadas a propriedades individuais e controle de como essas propriedades específicas são interface com.
Solução
Ajustes:
-
TypeDescriptionProvider
- Ainda substitui metadados (não se estende)
- também pode ser adicionado seja
TypeDescriptor.AddProvider
- pode ser aplicado per-tipo, bem como por exemplo, tornando-se possível aplicar a listas sem ter que implementar
ITypedList
-
TypeConverter
- para
PropertyGrid
, este é também o mecanismo usado para obter os metadados; note queExpandableObjectConverter
simplesmente delega aTypeDescriptor.GetProperties
, mas isso nem sempre é o caso - também responsável por objetos imutáveis ??recriar (tais como estruturas) com alterações
- para
-
UITypeEditor
- também responsável por pintar a área de antevisão
PropertyGrid
- também responsável por pintar a área de antevisão
adicionais:
-
IExtenderProvider
- Anexa propriedades; este pode ser o que você estava ficando confuso comTypeDescriptionProvider
-
ITypedList
- amplamente o gêmeo deICustomTypeDescriptor
, mas para as listas; pode ser evitada pelo uso de um indexadorTypeDescriptionProvider
e não-objecto em qualquerIList
, isto épublic T this[int index] {get;}
-
IListSource
- fornece indireto entre uma fonte de dados e os dados; por exemplo, umDataTable
implementosIListSource
, retornandoDefaultView
quando solicitado