Das PropertyGrid und Change-Notifications


Thomas Wölfer
Thomas Wölfer

28. November 2005


Das PropertyGrid Control ist ein unheimlich mächtiges Werkzeug - das einen aber manchmal auch zur Verzweiflung treiben kann. Ein Grund dafür sind die scheinbar "fehlenden" Events für viele wichtige Ereignisse: Wo zum Beispiel ist der "ObjectPropertyChanged" Event, der ausgelöst wird, wenn der Anwender mit Hilfe des PropertyGrids eine Eigenschaft eines Objektes verändert hat?

Genau: Gibts nicht.

Gibts aber eben doch: Das PropertyGird hat noch deutlich mehr an Funktionalität zu bieten, als aus der Liste der Methoden und Events herauszulesen ist - denn um da dranzukommen, muss man eine ISite Implementierung haben, und der "Site" Property des Grids zuweisen.

ISite hat eine wirklich interessante Eigenschaft - es ist auch IServiceProvider. Und der wiederum hat die schöne Methode GetService(), mit der das Grid - so es eine Site hat - nach verschiedenen Diensten fragt. (Hat man einen Dienst nicht implementiert, liefert man null - das Grid verwendet dann seine Default-Implementierung.

Will man nun zum Beispiel wissen, wenn eine Eigenschaft des bearbeiteten Objektes verändert wurde, dann muss mann den IComponentChangeServer implementieren. Fragt das Grid nach diesem Service, dann liefert man eine Instanz der eigenen Implementierung. Die wiederum hat die Methode "OnComponentChanged()" - und die ruft das Grid nach jeder Änderung auf.

Man sieht: Es geht - allerdings würde man sich schon ein wenig mehr Dokumentation dazu wünschen.