MVVMCrossでのバインディングビューのバインディングビューのデバッグNULL参照の例外には、問題を特定して解決するためのいくつかのステップが含まれます。この問題にアプローチする方法に関する詳細なガイドを次に示します。
1。例外のソースを特定**
- スタックトレースを確認します。スタックトレースは、NULL参照例外が発生している場所を示します。これは、あなたのビュー、ビューモデル、またはMVVMCross自体内にある可能性があります。- 一般的な問題:一般的な情報源には、未登録のサービス、nullビューモデル、または誤って構成されたバインディングが含まれます。
2。ViewModelとバインディングセットアップを確認します**
-ViewModel初期化:ビューモデルが適切に初期化され、ビューに設定されていることを確認してください。 MVVMCrossでは、これは通常自動的に発生しますが、ビューの「ViewModel」プロパティをチェックすることで確認できます。- バインディング構成:バインディングが正しく構成されていることを確認してください。 「CreateBindingSet」を使用してバインディングを定義し、タイプが一致することを確認します(例えば、「MainView」および `MainViewModel`)。
3。バインディングのヌル参照を確認してください**
- プロパティパス:バインディングのプロパティパスが正しいこと、およびビューモデルにプロパティが存在することを確認してください。たとえば、「vm => vm.myproperty」に拘束する場合、「myproperty」が無効であり、正しく定義されていることを確認します。- 初期化の後期:プロパティが後で初期化された場合(例:「ViewDidload」)、初期化後にバインディングが適用されることを確認します。
4。動的なコンテンツに遅延バインディングを使用**
- コンテンツまたはコントロールを動的に生成する場合は、「delaybind」を使用して、ビューが完全に構築された後にバインディングが適用されるようにすることを検討してください。これは、カスタムコントロールまたは動的リストを操作する場合に特に役立ちます。5.適切なIOC登録**
- サービス登録:ビューモデルでサービスを使用する場合は、IOCコンテナに登録されていることを確認してください。 MVVMCrossは、この目的のために「imvxiocprovider」を使用します。-initializelastChance:プラットフォーム固有のIOC登録を行っている場合は、[4]に記載されているような問題を回避するために、 `base.InitializelastChance()を呼び出します。
6。カスタムバインディングの問題**
- カスタムバインディングを使用している場合は、[5]に示すように「FillTargetFactories」をオーバーライドすることにより、ターゲットバインディングクラスが「setup.cs」に正しく実装および登録されていることを確認します。7。デバッグテクニック**
- ブレークポイント:ブレークポイントを使用して、実行時にビューモデルとバインディングの状態を検査します。- ロギング:MVVMCrossロギングを有効にして、バインディング操作と潜在的なエラーに関する詳細情報を取得します。
##8。mvxasynccommandの問題**
- [MVXASYNCCOMMAND`を使用している場合、[1]で説明されているように、コマンドを作成する前に「MVX.IOCProvider」が初期化されていることを確認してください。これは、単体テストシナリオにとって重要です。
これらの手順に従うことにより、MVVMCrossのビューバインディングに関連するほとんどのnull参照例外を特定して解決できるはずです。
引用:[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-References-when-unit-testing-mxvasyncommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-with-binding-to-mvxview-with-xamarin-ios-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-during-binding-with-mvvmcross
[5] https://www.mvvmcross.com/documentation/advanced/custom-dataバインディング
[6] https://stackoverflow.com/questions/40419789/mvvvmcross-platform-exceptions-mvxexception bindingcontext-is-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundmentals/dataバインディング