首页 文章

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

提问于
浏览
10

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

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

如果你将一个属性从ui设置为viewmodel就像这样 .

  • setter调用已启动

  • 值设置

  • INotifyPropertyChanged已启动

  • 完成了INotifyPropertyChanged

  • setter完成了

  • getter调用并完成

  • IDataErrorInfo调用并完成

但如果你在viewmodel中设置了属性,它会像这样

  • setter调用已启动

  • 值设置

  • INotifyPropertyChanged已启动

  • getter调用并完成

  • IDataErrorInfo调用并完成

  • 完成了INotifyPropertyChanged

  • setter完成了

1 回答

  • 11

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

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

相关问题