Adicionar atributos de nível de propriedade dinamicamente usando TypeDescriptor para PropertyGrid

StackOverflow https://stackoverflow.com/questions/1300324

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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top