我有一个反映我班级属性的PropertyGrid。
我正在观看PropertyValueChanged事件并注意到PropertyValueChangedEventArgs提供了已更改的GridItem。
GridItem有一个我可以得到的Tag属性。我没有看到如何将GridItem的Tag属性设置为值。
如何设置GridItem的Tag属性?
答案 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 时,标记属性将设置为您在属性上定义的属性。