Ladění nulových referenčních výjimek, když vazební pohledy v MVVMCrossu zahrnují několik kroků k identifikaci a vyřešení problému. Zde je podrobný průvodce, jak přistupovat k tomuto problému:
1. Identifikujte zdroj výjimky **
- Zkontrolujte trasování zásobníku: Trace zásobníku bude označovat, kde se vyskytuje nulová referenční výjimka. To by mohlo být podle vašeho názoru, zobrazení modelu nebo v rámci samotného MVVMCross.- Běžné problémy: Běžné zdroje zahrnují neregistrované služby, modely nulových zobrazení nebo nesprávně nakonfigurované vazby.
2. Ověřte nastavení ViewModel a vazby **
- Inicializace ViewModel: Ujistěte se, že váš model pohledu je správně inicializován a nastaven na pohled. V MVVMCross se to obvykle děje automaticky, ale můžete jej ověřit kontrolou vlastnosti „ViewModel“ vašeho pohledu.- Konfigurace vazby: Ujistěte se, že jsou vazby správně nakonfigurovány. K definování vazeb použijte `createBindingSet` a zajistěte, aby se typy shodovaly (např.` Mainview` a `mainviewModel`).
3. Zkontrolujte, zda nejsou odkazy na nulové vazby **
- Cesty vlastností: Zajistěte, aby cesty vlastností ve vašich vazbách byly správné a aby vlastnosti existovaly v modelu pohledu. Pokud se například vážete na `vm => vm.myProperty`, ověřte, že` myProperty` není null a je správně definován.- Pozdní inicializace: Pokud jsou vlastnosti později inicializovány (např. V `viewDidload`), ujistěte se, že vazby budou po inicializaci aplikovány vazby.
4. Použijte zpožděnou vazbu pro dynamický obsah **
- Pokud dynamicky generujete obsah nebo ovládací prvky, zvažte použití `delayBind`, abyste zajistili, že vazby budou použity po plném vytvoření pohledu. To je zvláště užitečné při práci s vlastními ovládacími prvky nebo dynamickými seznamy.5. Zajistěte správnou registraci IOC **
- Registrace služby: Pokud používáte služby ve vašem modelu pohledu, ujistěte se, že jsou registrovány v kontejneru IOC. MVVMCross pro tento účel používá `imvxiocprovider`.- Inicializelastchance: Pokud provádíte registrace IOC specifické pro platformu, ujistěte se, že zavoláte `base.initializelastchance ()` Abyste se vyhnout problémům, jako jsou problémy popsané v [4].
6. Problémy s vlastní vazbou **
- Pokud používáte vlastní vazby, ověřte, že vaše cílové třídy vazby jsou správně implementovány a zaregistrovány v `setup.cs` přetvořením` filtArgetFactories`, jak je uvedeno v [5].7. Techniky ladění **
- Bloppoints: Pomocí bodů přerušení zkontrolujte stav vašeho modelu pohledu a vazby za běhu.- Protokolování: Umožněte protokolování MVVMCross získat podrobné informace o závazcích operacích a potenciálních chybách.
8.
- Pokud používáte `mvxasynccOmmand`, ujistěte se, že„ mvx.iocProvider “je inicializován před vytvořením příkazů, jak je popsáno v [1]. To je zásadní pro scénáře testování jednotek.Dodržováním těchto kroků byste měli být schopni identifikovat a vyřešit většinu nulových referenčních výjimek souvisejících s vazebmi pohledu v MVVMCross.
Citace:[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-reference-When-ninit-totest-mxvasynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-io-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-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-mvxException-bindingContext-is-null-druring-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifyTask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding