2009-05-19 33 views
1

我有一個PropertyGrid,它反映了我的類的屬性。如何設置propertygrid griditem標記

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

那GridItem有一個我可以得到的Tag屬性。我看不到如何將GridItem的Tag屬性設置爲值。

如何設置GridItem的Tag屬性?

回答

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中和覆蓋以設置的GridItem標籤屬性與預先定義TagAttribute一致OnPropertyValueChanged事件。現在

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」,該標籤屬性將被設置爲你的財產界定什麼

+0

ChangedItem是一個GridItem對象。我想在創建GridItem時設置標籤屬性。 但是GridItem是我的課程的一個屬性的反映。 當我創建該屬性時,我使用「描述」,「可瀏覽」等屬性。我認爲可能存在「標記」屬性。 – mohnston 2009-05-20 20:43:18