2012-12-02 3 views
7

Ich habe eine Eigenschaft Gitter eine Liste, zum Beispiel einer Klasse PersonWie steuern Sie, was in einem Eigenschaftenraster zur Laufzeit sichtbar ist?

[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); 
    } 
} 

Die Frage anzeigt wird, wie steuere ich das Browsable() Attribut zur Laufzeit, so dass, wenn ShowHidden = false die Hidden Linie (gelb hervorgehoben unten) entfällt .

Screenshot

Dank. Hier

Antwort

10

ein Beispiel:

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); 

Ersetzen Sie einfach DataType mit Eigenschaftsnamen. Beachten Sie, dass bei allen Eigenschaften das Attribut geändert werden muss (in diesem Fall "Browsable"). Wenn eine der Eigenschaften das Attribut nicht enthält, erhalten alle der Klasseneigenschaften die neue Attributeinstellung.

Code von hier: Exploring the Behaviour of Property Grid.

+0

Danke für den Hinweis. Ich habe es noch nicht geschafft zu arbeiten. Ich kann nicht herausfinden, welches die beste Platzierung für dieses Snippet ist. Ich habe es in einem Property Setter, aber ich sehe keinen Einfluss auf mein Raster. – ja72

+0

Ich erwartete, dass nur die Zeile für die Instanz mit ShowHidden = false entfernt wurde, aber die Zeile wurde von allen Instanzen entfernt. Ich werde die Antwort akzeptieren, da es irgendwie das getan hat, was ich brauche. – ja72

+2

Der Code ändert das BrowsableAttribute, aber ich sehe die Änderung im Grid nicht ... Wie kann ich die Laufzeit ändern? – FrancescoDS

Verwandte Themen