Laden...

Warum ergibt INotifyPropertyChanged kein Ping-Pong?

Erstellt von m74 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.428 Views
M
m74 Themenstarter:in
85 Beiträge seit 2009
vor 12 Jahren
Warum ergibt INotifyPropertyChanged kein Ping-Pong?

Mal angenommen, man bindet - wie üblich - ein View an ein ViewModel. Das ViewModel stellt in seinen Properties über INotifyPropertyChanged eine Rückmeldung dar.

Warum landet man dann bei einer TwoWay-Bindung eigentlich nicht in einem Ping-Pong-Spiel?

Ich meine, wenn doch die View an die Property einen Content-Change meldet, die Property im Setter den Content-Change eh wieder nach "oben" meldet, müsste doch eine Art "Ping-Pong" enstehen? Tut es aber unter Verwendung von INotifyPropertyChanged (zum Glück) nicht.

Aber warum ist das da nicht so? Habe dazu ein bisschen gegoogelt, aber leider nichts konkretes gefunden (was aber auch an meinen mangelnden Englisch-Kentnissen liegen könnte).

Grüße
M

B
387 Beiträge seit 2005
vor 12 Jahren

Hi m74,

das kommt daher, weil man i. d. R. im Setter von der Eigenschaft zunächst prüft, ob sich der Wert auch wirklich verändert hat. Wird also auf ein Property wieder ein Wert gesetzt, den es schon hat, dann kommt kein PropertyChanged.

Gruß
Roland

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

ich seh nicht woher ein PingPong Effekt kommen sollte. Wenn Die View das PropertyChanged Event bekommt und daraufhin seine Anzeige ändert, wieso sollte es seinerseits den Wert nochmals zurückschreiben in das Property? Der neue Wert kam doch von da. Es gibt gar keinen Grund den Setter aufzurufen und damt das Event evtl. nochmals auszulösen.

Was Blacal gesagt hat, ist natürlich trotzdem nicht falsch. Zu prüfen ob der zu setztende Wert wirklich anders ist als der bisherige Wert schadet meist nie.

Das DependencyProperty System von WPF bietet aber auch andere Situationen wo so ein Ping Pong unterbunden wird. Z.B. wenn mehrere DPs voneinander abhängig sind und z.B. Changed und Coercion Delegates sich gegenseitig immer aufrufen würden. Das wird genau einmal gemacht und dann unterdrückt, so dass keine Endlosschleifen passieren.

Baka wa shinanakya naoranai.

Mein XING Profil.

M
m74 Themenstarter:in
85 Beiträge seit 2009
vor 12 Jahren

Danke für eure Antworten.

D.h. ich sollte in meinen Properties auch prüfen ob sich der Wert überhaupt geändert hat und nur in dem Fall das OnPropertyChanged aufrufen?

Leider geht das nämlich nicht bei allen Typen (z.B. bei Listen), darum meine Frage.

Grüße
M

2.298 Beiträge seit 2010
vor 12 Jahren

Eine Liste als Property löst aber auch keine PropertyChanged-Event aus, solang die Liste nicht komplett getauscht wird.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |