10

最近、wpf が INotifyPropertyChanged を 2 つの異なる方法で処理することがわかりました。何が理由なのか知りたいだけです。

検証が true の通常の双方向バインディングを考えてみましょう。

ui から viewmodel にプロパティを設定すると、このようになります。

  • セッター呼び出し開始
  • 値セット
  • INotifyPropertyChanged を開始しました
  • INotifyPropertyChanged完了
  • セッター完了
  • ゲッターが呼び出されて完了
  • IDataErrorInfo が呼び出されて完了

ただし、ビューモデルでプロパティを設定すると、次のようになります

  • セッター呼び出し開始
  • 値セット
  • INotifyPropertyChanged を開始しました
  • ゲッターが呼び出されて完了
  • IDataErrorInfo が呼び出されて完了
  • INotifyPropertyChanged完了
  • セッター完了
4

1 に答える 1

11

プロパティを UI から ViewModel に変更すると、デッドロックのような状況が発生し、双方向のシナリオで再帰呼び出しが少なくなる可能性があります。これが起こらないようにするために、WPF がモデルに変更を加えている場合、INotifyPropertyChanged を介して変更を追跡し続けますが、この変更はディスパッチャー キューに入れられ、現在の更新が終了した後に実行されます。

ビューモデルの変更は WPF によって開始されないため、WPF は操作をキューに入れず、すぐに変更を実行します。

于 2012-06-08T10:50:50.777 に答える