2012-06-08 8 views
10

Recientemente descubrí que wpf maneja INotifyPropertyChanged de dos maneras diferentes. Solo quiero saber cuál es el motivo.¿Por qué el enlace WPF maneja INotifyPropertyChanged de dos maneras diferentes?

Tomemos un enlace twoway normal con la validación verdadera.

si establece una propiedad de ui a viewmodel, esto es así.

  • llamada colocador comenzó
  • valor establecido
  • INotifyPropertyChanged comenzó
  • INotifyPropertyChanged hecho
  • colocador hecho
  • captador llamado y hecho
  • IDataErrorInfo llamado y hecho

pero si se establece la propiedad en su modelo de vista que dice así

  • llamada colocador comenzó
  • valor establecido
  • INotifyPropertyChanged comenzó
  • captador llamado y hecho
  • IDataErrorInfo llamado y hecho
  • INotifyPropertyChanged hecho
  • setter hecho

Respuesta

11

Cambiar la propiedad de la interfaz de usuario a ViewModel puede llevar a un tipo de situación de interbloqueo que podría producirse en llamadas menos recurrentes en escenarios bidireccionales. Para evitar que esto suceda, cuando WPF realice un cambio en el modelo, seguirá haciendo un seguimiento de los cambios a través de INotifyPropertyChanged, pero este cambio se pondrá en la cola del asignador y se ejecutará después de que se complete su actualización actual.

Dado que el cambio en el modelo de vista no es iniciado por WPF, WPF no pondrá en cola la operación, sino que ejecutará el cambio inmediatamente.

+0

esto tiene sentido. thx mucho – blindmeis

+0

buena explicación –

Cuestiones relacionadas