Отладка нулевых справочных исключений при связывающих представлениях в MVVMcross включает в себя несколько этапов для выявления и решения проблемы. Вот подробное руководство о том, как подходить к этой проблеме:
1. Определите источник исключения **
- Проверьте трассировку стека: трассировка стека будет указывать, где происходит нулевое ссылочное исключение. Это может быть в вашем мнении, модели просмотра или в самом MVVMcross.- Общие проблемы: Общие источники включают незарегистрированные услуги, модели нулевого представления или неправильно настроенные привязки.
2. Проверьте ViewModel и настройку привязки **
- ViewModel Инициализация: убедитесь, что модель вашей просмотра правильно инициализирована и установлена на представление. В MVVMcross это обычно происходит автоматически, но вы можете проверить его, проверив свойство ViewModel 'вашего представления.- Конфигурация привязки: убедитесь, что привязки правильно настроены. Используйте `createBindingSet` для определения привязки и убедитесь, что типы совпадают (например,` mainView` и `mainViewModel`).
3. Проверьте наличие нулевых ссылок в привязках **
- Пути свойств: убедитесь, что пути свойства в ваших привязках являются правильными и что свойства существуют в модели представления. Например, если вы связываете с `vm => vm.myproperty`, убедитесь, что` myproperty 'не является нулевым и правильно определен.- Поздняя инициализация: если свойства инициализируются позже (например, в `viewdidload`), убедитесь, что привязанности применяются после инициализации.
4. Используйте отсроченную привязку для динамического контента **
- Если вы динамически генерируете контент или элементы управления, рассмотрите возможность использования `DelayBind` для обеспечения применения привязки после полного построения представления. Это особенно полезно при работе с пользовательскими управлениями или динамическими списками.5. Убедитесь, что правильная регистрация МОК **
- Регистрация услуг: при использовании услуг в вашей модели просмотра убедитесь, что они зарегистрированы в контейнере IOC. MVVMcross использует `imvxiocprovider` для этой цели.- Инициализастханс: при выполнении регистрации МОК, специфичной для платформы, убедитесь, что вы называете `base.initializelastchance ()`, чтобы избежать таких проблем, как описанные в [4].
6. Пользовательские проблемы с обязательностью **
- Если вы используете пользовательские привязки, убедитесь, что ваши целевые классы привязки правильно реализованы и зарегистрированы в `setup.cs`, переопределив` fillTargetFactories`, как показано в [5].7. Методы отладки **
- Точки останова: используйте точки останова, чтобы осмотреть состояние вашей модели зрения и привязки во время выполнения.- Регистрация: Включите журнал MVVMcross, чтобы получить подробную информацию об операциях привязки и потенциальных ошибках.
8. Mvxasynccommand Проблемы **
- При использовании `mvxasynccommand` убедитесь, что` mvx.iocprovider` инициализируется перед построением команд, как описано в [1]. Это имеет решающее значение для сценариев модульного тестирования.Следуя этим этапам, вы должны быть в состоянии идентифицировать и разрешать большинство нулевых ссылок, связанных с привязками для просмотра в MVVMcross.
Цитаты:[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-is-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullreference-exception-duging-dring-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-duging-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding