MVVMCrossは、バインディングソースが最初に設定されている場合、ビューモデルからビューにデータを1回だけ転送することにより、1回限りのバインディングを使用するときに更新を処理します。この最初の転送の後、バインディングは、ViewModelからの変更メッセージやイベントを積極的に監視しません。したがって、バインディングソース自体がリセットまたは再現されていない限り、ViewModelのプロパティの後続の変更はビューに反映されません。
MVVMCrossでの1回限りのバインディングのキーポイント:
1。初期データ転送:バインディングは、バインディングが最初に確立されたときに、ビューモデルからビューにデータを転送します。これは通常、設定可能なフィールドに役立ちますが、設定後に頻繁に変更されません。
2.継続的な監視なし:双方向または一方向のバインディングとは異なり、1回限りのバインディングでは、変更のビューモデルを継続的に監視しません。これは、最初のバインディング後にViewModelのプロパティが変更された場合、ビューは自動的に更新されないことを意味します。
3.ユースケース:一度限りのバインディングは、言語ファイルから静的テキストの設定など、データが静的またはめったに変更されないシナリオで一般的に使用されます。言語が選択されると、ユーザーが頻繁に変更することは珍しくなく、そのような場合に1回限りのバインディングを適切にします[1]。
4.バインディングソースのリセット:バインディングソースがリセットまたは再活性化されている場合、1回限りのバインディングは、新しいデータをViewModelからビューに再び転送します。ただし、これには、バインディングソースをリセットするための明示的なアクションが必要です。
5。動的ビューの制限:「MVXRecyclerview」を使用しているものなどの動的ビューでは、ビューがリサイクルされている場合、一度限りのバインディングが期待どおりに動作しない場合があります。そのような場合、ビューが再利用されると結合が再評価される可能性があり、これが予期しない行動につながる可能性があります[6]。
要約すると、MVVMCrossの1回限りのバインディングは、データが一度設定されており、動的に更新する必要がないシナリオ向けに設計されています。変更のためのViewModelの継続的な監視を回避することにより、結合インフラストラクチャを簡素化しますが、最初のバインディング後にViewModelのデータが変更された場合、ビューを更新するために手動介入が必要です。
引用:[1] https://www.mvvmcross.com/documentation/fundamentals/dataバインディング
[2] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[3] https://learn.microsoft.com/en-us/dotnet/maui/xaml/fundamentals/mvvm?view=net-maui-9.0
[4] https://stackoverflow.com/questions/46558177/mvvmcross-updates-to-bound-property-in-view-not-tropaging-to-property-in-viewm
[5] https://blog.ostebaronen.dk/2018/01/mvvmcross binding-target.html
[6] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[7] https://github.com/mvvmcross/mvvmcross/issues/87
[8] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/march/async-patterns-for-asynchronous-mvvm-applications-dataバインディング
[9] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/binding-mode?view=net-maui-9.0
[10] https://www.reddit.com/r/dotnetmaui/comments/103ai8p/mvvm_problems_having_troubles_with_data_bindings/
[11] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup