MVVMCrossでのバインディングのために公共特性を公開することは、ビューとビューモデル間の効果的なデータ結合に不可欠です。次に、次のようなベストプラクティスをいくつか紹介します。
##拘束力のある概念を理解します
MVVMCrossでは、バインディングには、ビューモデルのソースプロパティをビューのターゲットプロパティに接続することが含まれます。ソースは通常、ビューモデルの公共財産であり、ターゲットはあなたがバインドしたいビューの公共財産です[1]。
##パブリックプロパティ
MVVMCrossでバインドできるプロパティが公開されている必要があります。これは、ビューモデルとビューの両方に適用されます。カスタムビューまたはコントロールを使用している場合は、バインドするプロパティが公開されていることを確認してください[1] [2]。
inotifyPropertyChangedの実装
ビューモデルでは、InotifyPropertyChangedを実装して、プロパティが変更されたときにバインディングエンジンに通知します。 MVVMCrossは、このプロセスを簡素化するために「MVXViewModel」の「SetProperty」などのヘルパーメソッドを提供します。これにより、ビューモデルの変化がビューに反映されることが保証されます[4]。
##カスタムターゲットバインディング
Twowayモードでプロパティをバインドする必要がある場合、またはカスタムシナリオを処理する必要がある場合は、カスタムターゲットバインディングを作成する必要がある場合があります。これには、プロパティ値を設定する方法と変更を聞く方法を定義することが含まれます。 「mvxpropertyinfotargetbinding」などの基本クラスを使用して、プロセスを簡素化するために「mvxwitheventpropertyinfotargetbinding」です[2]。
##ターゲットバインディングの登録
カスタムターゲットバインディングを作成した後、「FillTargetFactories」をオーバーライドして「setup.cs」ファイルに登録する必要があります。これにより、MVVMCrossがカスタムバインディングを処理する方法を知っていることが保証されます[2]。
Fluent Bindings
MVVMCrossは、流bindingsをサポートしているため、コード内のバインディングを定義できます。流bindingを使用する場合、ターゲットがあなたがバインドしたい実際のビューであることを確認するか、目的のプロパティを公共として公開します[1]。
##ネストされたプロパティ
MVVMCrossは、ネストされたプロパティへの結合をサポートします。たとえば、サブビューモデルのプロパティにバインドできます。サブビューモデルが「InotifyPropertyChanged」を実装し、結合パスが正しく指定されていることを確認します[5]。
##バインディングのデバッグ
バインディングが期待どおりに機能していない場合は、「MVXBindingTrace」を使用して、結合トレースレベルを上げます。これは、拘束力のある操作に関する詳細な出力を提供することにより、問題を特定するのに役立ちます[5]。
これらのベストプラクティスに従うことにより、MVVMCrossで公共プロパティを効果的に公開および結合し、堅牢で保守可能なMVVMアプリケーションを確保できます。
引用:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross binding-target.html
[2] https://www.mvvmcross.com/documentation/advanced/custom-dataバインディング
[3] https://stackoverflow.com/questions/79082019/what-the-the-best-practice-to-bind-and-manipulate-properties-on-a-user-control-in
[4] https://www.mvvmcross.com/documentation/fundmentals/dataバインディング
[5] https://stackoverflow.com/questions/20986140/binding-sub-properties-mvvmcross
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-buld-build-mvvm-apps-with-xamarin-and-mvvmcross
[7] https://stackoverflow.com/questions/10700445/in-mvvmcross-how-do-ido-custom-custom-bind-porteries
[8] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup