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.

Foi útil?

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 que ExpandableObjectConverter simplesmente delega a TypeDescriptor.GetProperties, mas isso nem sempre é o caso
    • também responsável por objetos imutáveis ??recriar (tais como estruturas) com alterações
  • UITypeEditor

    • também responsável por pintar a área de antevisão PropertyGrid

adicionais:

  • IExtenderProvider - Anexa propriedades; este pode ser o que você estava ficando confuso com TypeDescriptionProvider
  • ITypedList - amplamente o gêmeo de ICustomTypeDescriptor, mas para as listas; pode ser evitada pelo uso de um indexador TypeDescriptionProvider e não-objecto em qualquer IList, isto é public T this[int index] {get;}
  • IListSource - fornece indireto entre uma fonte de dados e os dados; por exemplo, um DataTable implementos IListSource, retornando DefaultView quando solicitado
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top