Como definir tag GridItem PropertyGrid

votos
1

Eu tenho um PropertyGrid que reflete as propriedades da minha classe.

Estou assistindo o evento PropertyValueChanged e observe que PropertyValueChangedEventArgs fornece o GridItem que foi alterado.

Isso GridItem tem uma propriedade Tag que eu posso começar. Não vejo como definir a propriedade Tag de um GridItem para um valor.

Como posso definir a propriedade Tag de um GridItem?

Publicado 19/05/2009 em 21:51
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

... Minha resposta inicial foi muito longe, então eu estou reformulando toda a coisa nesta atualização ...

Aqui está o que eu faria se eu precisava para cumprir este requisito.

Criar um atributo que será usado para pré-definir o Tag valor da sua GridItem; vamos chamá-lo TagAttribute . Poderia ser tão simples como isto:

public class TagAttribute : Attribute
{
    public string TagValue { get; set; }

    public TagAttribute ( string tagValue )
    {
        TagValue = tagValue;
    }
}

Para pré-definir o Tag valor, você só precisa para decorar a propriedade desejada com este atributo.

public class MyAwesomeClass
{
    ...
    [TagAttribute( "This is my tag value." )]
    [CategoryAttribute( "Data" )]
    public string MyAwesomeProperty { get; set; }
    ...
}

Eu, então, herdar o PropertyGrid e substituir o OnPropertyValueChanged evento, a fim de definir o Tag propriedade do GridItem para coincidir com o pré-definido TagAttribute .

public partial class InheritedPropertyGrid : PropertyGrid
{
    ...    
    protected override void OnPropertyValueChanged ( PropertyValueChangedEventArgs e )
    {
        var propertyInfo = SelectedObject.GetType().GetProperty( e.ChangedItem.PropertyDescriptor.Name );
        var tagAttribute = propertyInfo.GetCustomAttributes( typeof( TagAttribute ) , false );

        if ( tagAttribute != null )
            e.ChangedItem.Tag = ( (TagAttribute)tagAttribute[0] ).TagValue;

        base.OnPropertyValueChanged( e );
    }    
    ...
}

Agora, quando você ligar para o OnPropertyValueChanged deste "InheritedPropertyGrid", o Tag propriedade será definida para o que você definiu na propriedade.

Respondeu 19/05/2009 em 22:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more