... Мой оригинальный ответ был довольно далек, поэтому я обновляю все это обновление ...
Вот что я бы сделал, если бы мне нужно было выполнить это требование.
Создайте атрибут, который будет использоваться для предварительного определения значения 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 будет установлено значение, определенное вами для свойства.