Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как мне отладить null ссылочные исключения при связывающих представлениях в mvvmcross


Как мне отладить null ссылочные исключения при связывающих представлениях в mvvmcross


Отладка нулевых справочных исключений при связывающих представлениях в 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