在MVVMCROSS中绑定视图时,调试零参考异常涉及识别和解决问题的几个步骤。这是有关如何解决此问题的详细指南:
1。确定异常的来源**
- 检查堆栈跟踪:堆栈跟踪将指示零引用异常发生的位置。这可能是您的视图,查看模型,也可以是MVVMCross本身。- 常见问题:常见来源包括未注册的服务,空视图模型或错误配置的绑定。
2。验证ViewModel和Binding设置**
- ViewModel初始化:确保您的视图模型已正确初始化并设置在视图上。在MVVMCross中,通常会自动发生,但是您可以通过检查视图的“ ViewModel”属性来验证它。- 绑定配置:确保正确配置绑定。使用`createBindingSet`定义绑定并确保类型匹配(例如`mainview`和`mainviewModel`)。
3。检查绑定中的null引用**
- 属性路径:确保绑定中的属性路径正确,并且属性存在于视图模型上。例如,如果您要绑定到`vm => vm.myproperty`,请验证“ myproperty”不是零,并且已正确定义。- 晚初始化:如果稍后初始化属性(例如,在“ ViewDidload”中),请确保在初始化后应用绑定。
4。使用延迟绑定来动态内容**
- 如果您动态生成内容或控件,请考虑使用“ delaybind”以确保在视图完全构造后应用绑定。当使用自定义控件或动态列表时,这特别有用。5。确保正确的IOC注册**
- 服务注册:如果在查看模型中使用服务,请确保它们在IOC容器中注册。 MVVMCROSS用于此目的。- 初始ZELASTCHANCE:如果进行特定于平台的IOC注册,请确保您致电`base.initializelastchance()`避免了[4]中所述的类似问题。
6。自定义绑定问题**
- 如果您使用的是自定义绑定,请通过覆盖[5]所示的覆盖`filltargetFactories“覆盖'filltargetFactories”在`setup.cs'中正确实现和注册的目标绑定类。7。调试技术**
- 断点:使用断点检查视图模型和运行时绑定的状态。- 记录:启用MVVMCross Logging以获取有关绑定操作和潜在错误的详细信息。
8。mvxasynccommand问题**
- 如果使用`mvxasynccommand“,请在构造命令之前初始化`mvx.iocprovider',如[1]中所述。这对于单位测试方案至关重要。通过遵循以下步骤,您应该能够识别和解决与MVVMCross中查看绑定有关的大多数NULL引用异常。
引用:[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-ios-and-mvvmcross
[3] https://github.com/mvvmcross/mvvmcross/issues/1378
[4] https://stackoverflow.com/questions/18954938/nullReference-exception-exception-during-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-is-null-during-mvxadap/40420356
[7] https://www.mvvmcross.com/documentation/advanced/mvxnotifytask
[8] https://www.mvvmcross.com/documentation/fundamentals/data-binding