如何设置propertygrid griditem标记

时间:2009-05-19 20:51:05

标签: .net winforms propertygrid

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

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

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

如何设置GridItem的Tag属性?

1 个答案:

答案 0 :(得分:0)

...我的原始答案相当遥远,所以我正在修改此更新中的所有内容......

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

创建一个属性,用于预定义GridItem的 Tag 值;我们称之为 TagAttribute 。它可以这么简单:

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

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

要预先定义标记值,您只需要使用此属性修饰所需的属性。

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 时,标记属性将设置为您在属性上定义的属性。