2012-12-02 42 views
7

我有一個屬性網格中顯示的列表,例如一個類的Person如何控制運行時屬性網格中可見的內容?

[TypeConverter(typeof(ExpandableObjectConverter))] 
public class Person 
{ 
    public bool ShowHidden { get; set; } 
    public string Name { get; set; } 
    //[Browsable(false)] 
    public string Hidden { get; set; } 

    public override string ToString() 
    { 
     return string.Format("Person({0})", Name); 
    } 
} 

問題是我如何在運行時控制Browsable()屬性,使得當ShowHidden = falseHidden線(高亮下面黃色)被省略。

Screenshot

謝謝。

回答

10

下面是一個例子:

PropertyDescriptor descriptor= 
    TypeDescriptor.GetProperties(this.GetType())["DataType"]; 
BrowsableAttribute attrib= 
    (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)]; 
FieldInfo isBrow = 
    attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance); 
isBrow.SetValue(attrib,false); 

只需更換DataType您的屬性名稱。 請注意,所有屬性必須具有更改的屬性(在本例中爲Browsable)。如果其中一個屬性缺少屬性,則所有的類屬性都將獲得新的屬性設置。

取自這裏的代碼:Exploring the Behaviour of Property Grid

+0

感謝您的提示。我還沒有完成它的工作。我無法弄清楚這段代碼的最佳位置。我在一個屬性設置器中擁有它,但是我看不到對我的網格有影響。 – ja72

+0

我期望的是隻刪除具有'ShowHidden = false'的實例的行,但它將刪除所有實例中的行。我會接受答案,因爲它確實有我需要的。 – ja72

+2

該代碼更改了BrowsableAttribute,但我沒有看到網格中的更改...我如何查看更改運行時? – FrancescoDS

相關問題