我最近发现wpf以两种不同的方式处理INotifyPropertyChanged。我只是想知道原因是什么。
让我们采用正常的双向绑定验证为真。
如果你将一个属性从ui设置为viewmodel,它会像这样。
但是如果你在viewmodel中设置属性就像这样
答案 0 :(得分:11)
将属性从UI更改为ViewModel可能会导致死锁类型的情况,这种情况可能会在两种情况下以较少的递归调用结束。为了阻止这种情况发生,当WPF对模型进行更改时,它将继续通过INotifyPropertyChanged跟踪更改,但此更改将在调度程序队列中排队,并且将在其当前更新完成后执行。
由于视频模型的更改不是由WPF启动的,因此WPF不会对操作进行排队,它会立即执行更改。