1

我有一个 PropertyGrid,它反映了我的班级的属性。

我正在观看 PropertyValueChanged 事件并注意到 PropertyValueChangedEventArgs 提供了已更改的 GridItem。

那个 GridItem 有一个我可以获得的 Tag 属性。我看不到如何将 GridItem 的 Tag 属性设置为一个值。

如何设置 GridItem 的 Tag 属性?

4

1 回答 1

0

...我最初的答案离我很远,所以我在这次更新中修改了整个事情...

如果我需要满足这个要求,我会这样做。

创建一个属性,用于预定义 GridItem 的Tag值;我们称之为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事件,以便将GridItem的Tag属性设置为与预定义的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 );
    }    
    ...
}

现在,当您连接到此“InheritedPropertyGrid”的OnPropertyValueChanged时, Tag属性将设置为您在该属性上定义的内容。

于 2009-05-19T21:32:34.067 回答