为什么WPF绑定以两种不同的方式处理INotifyPropertyChanged?

时间:2012-06-08 10:45:13

标签: wpf binding inotifypropertychanged

我最近发现wpf以两种不同的方式处理INotifyPropertyChanged。我只是想知道原因是什么。

让我们采用正常的双向绑定验证为真。

如果你将一个属性从ui设置为viewmodel,它会像这样。

  • setter call started
  • 值集
  • INotifyPropertyChanged已启动
  • INotifyPropertyChanged已完成
  • setter done
  • getter call and done
  • IDataErrorInfo已调用并完成

但是如果你在viewmodel中设置属性就像这样

  • setter call started
  • 值集
  • INotifyPropertyChanged已启动
  • getter call and done
  • IDataErrorInfo已调用并完成
  • INotifyPropertyChanged已完成
  • setter done

1 个答案:

答案 0 :(得分:11)

将属性从UI更改为ViewModel可能会导致死锁类型的情况,这种情况可能会在两种情况下以较少的递归调用结束。为了阻止这种情况发生,当WPF对模型进行更改时,它将继续通过INotifyPropertyChanged跟踪更改,但此更改将在调度程序队列中排队,并且将在其当前更新完成后执行。

由于视频模型的更改不是由WPF启动的,因此WPF不会对操作进行排队,它会立即执行更改。