2012-06-08 69 views
10

我最近發現wpf以兩種不同的方式處理INotifyPropertyChanged。我只是想知道是什麼原因。爲什麼WPF綁定以兩種不同的方式處理INotifyPropertyChanged?

讓我們看看正常的雙向綁定與驗證是否正確。

如果你從UI設置屬性viewmodel它是這樣的。

  • 二傳手通話開始
  • 值設置
  • INotifyPropertyChanged的開始
  • INotifyPropertyChanged的做
  • 二傳手做
  • 吸叫,做
  • IDataErrorInfo的叫,做

,但如果你在你的視圖模型設置屬性它是這樣的

  • 二傳手通話開始
  • 值設置
  • INotifyPropertyChanged的開始
  • 吸叫,做
  • IDataErrorInfo的叫,做
  • INotifyPropertyChanged完成
  • 執行器完成

回答

11

將屬性從UI更改爲ViewModel可能會導致死鎖,這種情況可能會在兩種情況下結束較少的遞歸調用。爲了阻止這種情況發生,當WPF正在對模型進行更改時,它將通過INotifyPropertyChanged繼續跟蹤更改,但是此更改將在調度程序隊列中排隊,並且將在其當前更新完成後執行。

由於viewmodel的更改不是由WPF啓動的,因此WPF不會對該操作進行排隊,它會立即執行更改。

+0

這很有道理。 thx很多 – blindmeis

+0

很好的解釋 –

相關問題