Properties im PropertyGrid verstecken


Thomas Wölfer
Thomas Wölfer

21. Oktober 2006


Manchmal möchte man das das PropertyGrid nur einige der vorhandenen Properties eines Objektes anzeigt - und zwar abhängig vom Kontext. Das ist relativ einfach, da das PropertyGrid zum ermitteln der Metadaten über eine Objektinstanz den TypeConverter des Typs der Instanz verwenden. Alles was man also tun muss, ist einen eigenen TypeConverter an den Typ zu hängen.

Hier ein extrem vereinfachtes Beispiel: Der Typ TestClass hat eigentlich ein Property, und dieses eine Property wird im Beispiel vollständig versteckt. (In der Realität wird man wohl eher ein Subset der vorhandenen Properties liefern statt einfach alle zu verstecken.)

Schritt eins: Der Typ muss mit einem TypeConverter ausgestattet werden:

[TypeConverter(typeof(TestClassConverter))]
public class TestClass
{
   [Browsable(true)]
   int Property
   {
      get
      {
         return 5;
      }
      set
      {
      }
   }
}

Schritt zwei: Der TypeConverter muss implementiert werden:

public class TestClassConverter : TypeConverter
{
   public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
   {
      return new PropertyDescriptorCollection(new PropertyDescriptor[] { });
   }

   public override bool GetPropertiesSupported(ITypeDescriptorContext context)
   {
     return true;
   }
}