Adicionar atributos de nível de propriedade dinamicamente usando TypeDescriptor para PropertyGrid
-
18-09-2019 - |
Pergunta
Eu quero adicionar atributos (como Browsable (false)) dinamicamente durante a exibição na grade. Cenário é que eu tenho uma classe personalizada com algumas propriedades públicas. No entanto, eu não quero todas as propriedades públicas a ser exibido na interface do usuário. Existe uma saída?
Eu tentei usar TypeDescriptor. No entanto, ele só funciona no nível do tipo e não no nível da propriedade. Eu não poderia encontrar qualquer ajuda sobre como usá-lo na propriedade de nível.
Os ponteiros serão muito apreciados.
Solução
Na verdade, é possível, mas eu tenho que admitir que é bastante obscura e mal documentadas. A chave é para derivar seu próprio TypeDescriptorProvider personalizado a partir System.ComponentModel.TypeDescriptionProvider. Então você pode voltar seu próprio descendente TypeDescriptor.
Eu fiz isso para corrigir uma limitação bastante desagradável sobre ViewModels e metadados em ASP.NET MVC, mas você pode muito bem usá-lo para inserir o seu próprio metadados extra.
Outras dicas
Eu tenho trabalhado nesta mesma área para os últimos dias. Para encurtar a história, eu cheguei à conclusão de que não é possível.
É a razão que você está tentando aplicar atributos em tempo de execução porque você não quer misturar código "UI" com suas classes personalizadas?
Se for esse o caso, o BrowsableAttribute
é um membro da ComponentModel ( http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx ) e não é UI relacionados no mesmo sentido como WinForms.
Karl