Как установить метку свойства gridrid - PullRequest
1 голос
/ 20 мая 2009

У меня есть PropertyGrid, который отражает свойства моего класса.

Я наблюдаю событие PropertyValueChanged и замечаю, что PropertyValueChangedEventArgs предоставляет измененный элемент GridItem.

У этого GridItem есть свойство Tag, которое я могу получить. Я не вижу, как установить для свойства Tag GridItem значение.

Как установить свойство Tag для GridItem?

1 Ответ

0 голосов
/ 20 мая 2009

... Мой оригинальный ответ был довольно далек, поэтому я обновляю все это обновление ...

Вот что я бы сделал, если бы мне нужно было выполнить это требование.

Создайте атрибут, который будет использоваться для предварительного определения значения Tag вашего GridItem; давайте назовем это TagAttribute . Это может быть так просто:

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

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

Чтобы предварительно определить значение Tag , вам просто нужно украсить желаемое свойство этим атрибутом.

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

Я бы тогда унаследовал PropertyGrid и переопределил событие OnPropertyValueChanged , чтобы свойство Tag GridItem совпадало с предопределенным 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 );
    }    
    ...
}

Теперь, когда вы подключитесь к OnPropertyValueChanged этого "InheritedPropertyGrid", для свойства Tag будет установлено значение, определенное вами для свойства.

...