2009-05-19 15 views
1

私のクラスのプロパティを反映するPropertyGridがあります。propertygrid griditemタグの設定方法

私はPropertyValueChangedイベントを見て、PropertyValueChangedEventArgsが変更されたGridItemを提供していることに気付きました。

GridItemには取得できるTagプロパティがあります。 GridItemのTagプロパティを値に設定する方法がわかりません。

GridItemのTagプロパティを設定するにはどうすればよいですか?

答えて

0

...私のオリジナルの答えは

は、ここで私はこの要件を満たすために必要な場合、私はどうなるのかだ...かなり遠いので、私はこのアップデートでは、全体の事を刷新していますオフになっていました。

タグのGridItemの値を事前定義するために使用される属性を作成します。 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のを継承し、が事前に定義されたTagAttributeと一致するGridItemタグプロパティを設定するためにイベントを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); 
    }  
    ... 
} 

今、あなたはにフックするときタグプロパティは、プロパティで定義されたものに設定されます。この「InheritedPropertyGrid」、のをOnPropertyValueChanged。

+0

ChangedItemはGridItemオブジェクトです。 GridItemが作成されるときに、タグプロパティを設定したいと思います。 しかし、GridItemは自分のクラスのプロパティを反映しています。 私はそのプロパティを作成するときに「Description」、「Browseable」などの属性を使用します。「Tag」属性があると考えました。 – mohnston

+0

このメソッドの唯一の問題は、静的データの設定のみを許可することです。 –

+0

OPの質問の範囲では、要求が(これが達成する)「タグ」値を事前に定義することであるため、これは「問題」とはみなされません。 –

関連する問題