2012-06-08 6 views
10

Ich habe kürzlich herausgefunden, dass wpf INotifyPropertyChanged auf zwei verschiedene Arten behandelt. Ich will nur wissen, was der Grund ist.Warum WPF-Bindung behandelt INotifyPropertyChanged auf zwei verschiedene Arten?

Lassen Sie uns eine normale zweifache Bindung mit Validierung wahr nehmen.

Wenn Sie eine Eigenschaft von ui auf viewmodel setzen, geht es so.

  • Setter Aufruf gestartet
  • Wert
  • INotifyPropertyChanged gestartet
  • INotifyPropertyChanged getan
  • Setter getan
  • Getter genannt und getan
  • IDataErrorInfo genannt und getan

aber wenn Sie die Eigenschaft in Ihrem Viewmodel gesetzt geht es so

  • Setter Anruf
  • Wert
  • INotifyPropertyChanged gestartet
  • Getter genannt und getan
  • IDataErrorInfo
  • genannt und getan begann
  • INotifyPropertyChanged erfolgt
  • Setter getan

Antwort

11

Das Ändern der Eigenschaft von UI zu ViewModel kann zu einer Deadlock-Situation führen, die in zwei verschiedenen Szenarien zu weniger rekursiven Aufrufen führt. Um dies zu verhindern, wird WPF, wenn Änderungen am Modell vorgenommen werden, weiterhin Änderungen über INotifyPropertyChanged verfolgen, diese Änderung wird jedoch in der Dispatcher-Warteschlange in die Warteschlange gestellt und nach Abschluss der aktuellen Aktualisierung ausgeführt.

Da die Änderung im Viewmodel nicht von WPF initiiert wird, wird WPF die Operation nicht in die Warteschlange stellen, sondern die Änderung sofort ausführen.

+0

das macht Sinn. Thx viel – blindmeis

+0

gute Erklärung –