MVVMCrossでは、1回限りのバインディングと双方向の結合は、ビューとビューモデルの間の相互作用を管理する際に明確な目的を果たします。
1回限りのバインディング
1回限りのバインディングは、バインディングソースが設定されている場合、ビューモデルからビューにデータを1回だけ転送するために使用されます。この最初の転送の後、バインディングはViewModelのプロパティの変更を監視せず、バインディングソース自体がリセットされない限り、ビューを更新しません。このモードは、設定可能なフィールドに役立ちますが、設定後に頻繁に変更されません。たとえば、MVVMCrossでは、言語ファイルから静的テキストを設定するために1回限りのバインディングが使用されます。ユーザーは通常、言語を一度選択し、その後はめったに変更されないためです[1] [10]。
###双方向のバインディング
一方、双方向結合は、ビューとビューモデルの間に連続的な双方向のつながりを確立します。 ViewまたはViewModelのいずれかの変更は、他方の更新をトリガーします。このモードは、ユーザーの入力とViewModelからの変更の両方がリアルタイムで反映される必要があるフォームの記入など、既存のデータを編集する場合に特に役立ちます。双方向の結合は、MVVMCrossで一般的に使用されており、多くの場合、新しいバインディングのデフォルトモードとして機能します[1] [2]。
###キーの違い
- データフローの方向:1回限りのバインディングは、ビューモデルからのビューを1回だけ更新し、双方向のバインディングはビューとビューモデルの両方を継続的に更新します。
- 監視の変更:1回限りのバインディングでは、最初の更新後の変更を監視しませんが、双方向のバインディングは継続的に監視し、両端を更新します。
- ユースケース:1回限りのデータは、静的または頻繁にデータを変更するのに最適ですが、双方向はインタラクティブフォームや動的データ交換により適しています。
要約すると、一度限りのバインディングは静的または初期のデータセットアップに使用されますが、双方向のバインディングは、ビューとビューモデルの両方が互いの変化をリアルタイムで反映する必要があるインタラクティブなシナリオに使用されます。
引用:[1] https://www.mvvmcross.com/documentation/fundamentals/dataバインディング
[2] https://blog.ostebaronen.dk/2018/01/mvvmcross binding-target.html
[3] https://www.mvvmcross.com/documentation/advanced/custom-dataバインディング
[4] https://softwareengineering.stackexchange.com/questions/322450/how-does-tway-data-binding-data-from-simple-auto-sync
[5] https://stackoverflow.com/questions/17156368/
[6] https://yanxiaodi.gitbook.io/xamarin-mvvvcross handbook/using-mvvvmcross-create-your-first-xamarin-app/creating-android-project/understanding-the-data-syntax
[7] https://stackoverflow.com/questions/13504906/what-is-two-wayバインディング
[8] https://github.com/mvvmcross/mvvmcross/issues/29
[9] https://stackoverflow.com/questions/27803448/data-binding-one-vs-two-way
[10] https://stackoverflow.com/questions/48910503/binding-mode-onetime-in-mvxrecyclerview
[11] https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data binding/binding-mode?view=net-maui-9.0
[12] https://www.reddit.com/r/javascript/comments/v993r4/askjs_why_is_oneway_bindie_better_than_twoway/