Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Warum ergibt INotifyPropertyChanged kein Ping-Pong?
m74
myCSharp.de - Member



Dabei seit:
Beiträge: 90
Herkunft: Dortmund

Themenstarter:

Warum ergibt INotifyPropertyChanged kein Ping-Pong?

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von m74 am .
private Nachricht | Beiträge des Benutzers
Blacal
myCSharp.de - Member



Dabei seit:
Beiträge: 392

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
talla
myCSharp.de - Experte

Avatar #avatar-3214.jpg


Dabei seit:
Beiträge: 7290
Herkunft: Esslingen

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
m74
myCSharp.de - Member



Dabei seit:
Beiträge: 90
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2357

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers