Pergunta

Existe uma maneira de fazer o seguinte? I ver que os argumentos do atributo deve ser uma expressão constante, assim como eu ia contornar isso? Se eu não quero carregar alguns propriedades em um datagridview usando vinculativo, o que é a melhor alternativa?

  class TestObj
  {
     private bool isBrowsable = false;

     [Browsable(isBrowsable)]
     public string String1
     {
        get
        {
           return "Foo";
        }
     }
     [Browsable(isBrowsable)]
     public string String2
     {
        get
        {
           return "Baz";
        }
     }
  }
Foi útil?

Solução

Você pode fornecer informações de tipo personalizado dinâmica em tempo de execução através da aplicação do ICustomTypeDescriptor interface -. mas isso é um pouco de trabalho em não quase tão simples como decorar as propriedades com atributos

Outras dicas

Por tempo de execução, eu acho que você está olhando provavelmente ICustomTypeDescriptor. Se fosse uma decisão tempo de compilação, você poderia ter directivas compilador usado:


 #define ISBROWSABLE
 #if ISBROWSABLE
 [your attribute]
 #endif

Você pode carregar o valor de algum arquivo de configuração ou banco de dados utilizando a abordagem de semelhante Como definir valor dinâmico na minha Atributo passando nomes de classe e de propriedade, por exemplo,

[IsBrowsable ( "classname", "propertyname")]

No entanto, será muito aborrecido digitar como nomes de cordas, que são óbvias e de alguma forma deve ser capaz de determinadas a partir de reflexão. Você pode tentar ferramentas nos IL tecelão, como PostSharp ou Fody. (Creio eu, que capaz de fazer tal pensa, mas não têm um exemplo apenas agora) ?

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