PropertyGrid und PropertyValueChanged

06/02/2008 - 09:41 von Norbert Eder | Report spam
Hallo,

leider wird diese Frage in Foren eher selten beantwortet, vielleicht findet
sich ja hier eine Lösung:

Das PropertyGrid wirft ein Event PropertyValueChanged, wenn sich eine
angezeigt Property àndert. Das ist auch gut so und funktioniert. Das Problem
entsteht dann, wenn eine Property eine Collection darstellt, welche im
CollectionEditor angezeigt wird. Ändert sich ein Item aus der Collection
wird das besagte Event nicht ausgelöst.

Mein Workaround war nun, einen Custom UITypeEditor zu schreiben, der mir in
der Methode EditValue einen Clone meiner Collection erstellt und zurückgibt,
damit der Object-Vergleich im PropertyGrid nicht Equal ist und somit das
PropertyValueChanged-Event ausgelöst wird. Nun, die Hashcodes sind
unterschiedlich, das Event müsste ausgelöst werden, passiert so aber nicht.

Hintergrund: Ich möchte eine Validierung implementieren, die möglichst
direkt nach dem Editieren einer Property einen entsprechenden Hinweis an den
User gibt. Hat hier jemand eine Idee wie dieses Problem gelöst werden kann?

Danke.

Beste Grüße,
Norbert Eder
http://blog.norberteder.com
 

Lesen sie die antworten

#1 Norbert Eder
06/02/2008 - 10:47 | Warnen spam
Eine neue Erkenntnis:
Nachdem ich mir jetzt die relevante Methode EditPropertyValue im GridEntry
angesehen habe:

object propertyValue = this.PropertyValue;
object obj3 = this.UITypeEditor.EditValue(this, this, propertyValue);

if ((obj3 != propertyValue) && this.IsValueEditable)
{
iva.CommitValue(this, obj3);
}

Dies bedeutet, dass die Collection nicht nur als Getter angeboten werden
darf, sondern auch einen Setter besitzen muss, da sonst IsValueEditable
nicht aufgeht.

Grundsàtzlich funktioniert es nun. Das Event wird jedoch nur geworfen, wenn
man den CollectionEditor schließt. Schöner wàre dies natürlich, wenn das
jeweilige Element direkt bearbeitet wird. Eventuell hat hier jemand eine
Idee?


Beste Grüße,
Norbert Eder
http://blog.norberteder.com

"Norbert Eder" schrieb im Newsbeitrag
news:
Hallo,

leider wird diese Frage in Foren eher selten beantwortet, vielleicht
findet sich ja hier eine Lösung:

Das PropertyGrid wirft ein Event PropertyValueChanged, wenn sich eine
angezeigt Property àndert. Das ist auch gut so und funktioniert. Das
Problem entsteht dann, wenn eine Property eine Collection darstellt,
welche im CollectionEditor angezeigt wird. Ändert sich ein Item aus der
Collection wird das besagte Event nicht ausgelöst.

Mein Workaround war nun, einen Custom UITypeEditor zu schreiben, der mir
in der Methode EditValue einen Clone meiner Collection erstellt und
zurückgibt, damit der Object-Vergleich im PropertyGrid nicht Equal ist und
somit das PropertyValueChanged-Event ausgelöst wird. Nun, die Hashcodes
sind unterschiedlich, das Event müsste ausgelöst werden, passiert so aber
nicht.

Hintergrund: Ich möchte eine Validierung implementieren, die möglichst
direkt nach dem Editieren einer Property einen entsprechenden Hinweis an
den User gibt. Hat hier jemand eine Idee wie dieses Problem gelöst werden
kann?

Danke.

Beste Grüße,
Norbert Eder
http://blog.norberteder.com

Ähnliche fragen