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
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
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.
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
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 |