Le eccezioni di riferimento NULL di debug quando le viste vincolanti in MVVMCRoss implicano diversi passaggi per identificare e risolvere il problema. Ecco una guida dettagliata su come affrontare questo problema:
1. Identifica la fonte dell'eccezione **
- Controllare la traccia dello stack: la traccia dello stack indicherà dove si sta verificando l'eccezione di riferimento nullo. Questo potrebbe essere nel tuo punto di vista, visualizza modello o all'interno di MVVMCRoss stesso.- Problemi comuni: le fonti comuni includono servizi non registrati, modelli Null View o attacchi configurati in modo errato.
2. Verifica ViewModel e configurazione vincolante **
- ViewModel Initialization: assicurarsi che il modello di visualizzazione sia correttamente inizializzato e impostato sulla vista. In mvvmcross, questo in genere accade automaticamente, ma puoi verificarlo controllando la proprietà `ViewModel 'della tua vista.- Configurazione di binding: assicurarsi che gli attacchi siano configurati correttamente. Utilizzare `CreateBindingSet` per definire i binding e assicurarsi che i tipi corrispondano (ad esempio,` mainview` e `mainviewmodel`).
3. Controlla i riferimenti nulli in bindings **
- Percorsi di proprietà: assicurarsi che i percorsi di proprietà nei binding siano corretti e che le proprietà esistano nel modello di visualizzazione. Ad esempio, se stai vincolando a `vm => vM.myProperty`, verifica che` myproperty` non sia nullo ed è definito correttamente.- Inizializzazione tardiva: se le proprietà vengono inizializzate in seguito (ad esempio, in `ViewDidload`), assicurarsi che i legami vengano applicati dopo l'inizializzazione.
4. Usa l'associazione ritardata per il contenuto dinamico **
- Se stai generando dinamicamente contenuti o controlli, prendi in considerazione l'utilizzo di `DelayBind` per garantire l'applicazione dei legami dopo che la vista è stata completamente costruita. Ciò è particolarmente utile quando si lavora con controlli personalizzati o elenchi dinamici.5. Assicurati la registrazione IOC corretta **
- Registrazione del servizio: se si utilizzano i servizi nel modello di visualizzazione, assicurarsi che siano registrati nel contenitore IOC. A questo scopo MvvMcross usa `imvxiocprovider`.- InitializeLastChance: se si eseguono le registrazioni IOC specifiche della piattaforma, assicurati di chiamare `base.initializelastchance ()` per evitare problemi come quelli descritti in [4].
6. Problemi di vincolo personalizzati **
- Se si utilizzano attacchi personalizzati, verificare che le classi di associazione target siano correttamente implementate e registrate in `setup.cs` prevalere su` FillTargetFactories 'come mostrato in [5].7. Tecniche di debug **
- Breakpoint: utilizzare i punti di interruzione per ispezionare lo stato del modello di visualizzazione e i legami in fase di esecuzione.- Registrazione: abilitare la registrazione MVVMCRoss per ottenere informazioni dettagliate sulle operazioni di vincolo e potenziali errori.
8. MvxasyncCommand Problems **
- Se si utilizza `mvxasynccommand`, assicurarsi che` mvx.iocprovider` sia inizializzato prima di costruire comandi, come descritto in [1]. Questo è cruciale per gli scenari di test unitari.Seguendo questi passaggi, dovresti essere in grado di identificare e risolvere la maggior parte delle eccezioni di riferimento nulli relative ai legami di visualizzazione in mvvmcross.
Citazioni:[1] https://stackoverflow.com/questions/53597908/mvvm-cross-null-references-when-unit-testing-mxvasynccommand/53618570
[2] https://stackoverflow.com/questions/56531225/problem-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-binding
[6] https://stackoverflow.com/questions/40419789/mvvmcross-platform-exceptions-mvxexception-bindingcontext-is-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding