Gỡ lỗi các ngoại lệ tham chiếu null khi các chế độ xem ràng buộc trong MVVMCROSS liên quan đến một số bước để xác định và giải quyết vấn đề. Đây là một hướng dẫn chi tiết về cách tiếp cận vấn đề này:
1. Xác định nguồn ngoại lệ **
- Kiểm tra dấu vết ngăn xếp: Dấu vết ngăn xếp sẽ cho biết xảy ra ngoại lệ tham chiếu null. Điều này có thể nằm trong chế độ xem của bạn, xem mô hình hoặc trong chính MVVMCROSS.- Các vấn đề phổ biến: Các nguồn phổ biến bao gồm các dịch vụ chưa đăng ký, mô hình Null View hoặc các ràng buộc được cấu hình không chính xác.
2. Xác minh thiết lập ViewModel và Binding **
- Khởi tạo ViewModel: Đảm bảo rằng mô hình chế độ xem của bạn được khởi tạo đúng và đặt trên chế độ xem. Trong MVVMcross, điều này thường xảy ra tự động, nhưng bạn có thể xác minh nó bằng cách kiểm tra thuộc tính `ViewModel` trong chế độ xem của bạn.- Cấu hình ràng buộc: Đảm bảo các ràng buộc được cấu hình chính xác. Sử dụng `createdBindingSet` để xác định các ràng buộc và đảm bảo rằng các loại khớp (ví dụ:` MainView` và `MainViewModel`).
3. Kiểm tra các tài liệu tham khảo null trong các ràng buộc **
- Đường dẫn thuộc tính: Đảm bảo rằng các đường dẫn thuộc tính trong các ràng buộc của bạn là chính xác và các thuộc tính tồn tại trên mô hình chế độ xem. Ví dụ: nếu bạn liên kết với `vm => vm.myproperty`, hãy xác minh rằng` myProperty` không phải là null và được xác định chính xác.- Khởi tạo muộn: Nếu các thuộc tính được khởi tạo sau (ví dụ: trong `viewDidload`), hãy đảm bảo rằng các ràng buộc được áp dụng sau khi khởi tạo.
4. Sử dụng liên kết bị trì hoãn cho nội dung động **
- Nếu bạn tạo nội dung hoặc điều khiển tự động, hãy xem xét sử dụng `delaybind` để đảm bảo các ràng buộc được áp dụng sau khi chế độ xem được xây dựng đầy đủ. Điều này đặc biệt hữu ích khi làm việc với các điều khiển tùy chỉnh hoặc danh sách động.5. Đảm bảo đăng ký IOC thích hợp **
- Đăng ký dịch vụ: Nếu sử dụng các dịch vụ trong mô hình xem của bạn, hãy đảm bảo chúng được đăng ký trong thùng chứa IOC. MVVMCROSS sử dụng `imvxiocProvider` cho mục đích này.- Khởi tạo: Nếu thực hiện đăng ký IOC dành riêng cho nền tảng, hãy đảm bảo bạn gọi `base.initializelastchance ()` Để tránh các vấn đề như được mô tả trong [4].
6. Các vấn đề ràng buộc tùy chỉnh **
- Nếu bạn đang sử dụng các ràng buộc tùy chỉnh, hãy xác minh rằng các lớp ràng buộc mục tiêu của bạn được triển khai và đăng ký chính xác trong `setup.cs` bằng cách ghi đè` filltargetfactories` như trong [5].7. Kỹ thuật gỡ lỗi **
- Điểm dừng: Sử dụng các điểm dừng để kiểm tra trạng thái của mô hình xem và ràng buộc của bạn khi chạy.- Ghi nhật ký: Bật đăng nhập MVVMcross để có được thông tin chi tiết về các hoạt động ràng buộc và các lỗi tiềm năng.
8. Các vấn đề MvxasyncCommand **
- Nếu sử dụng `mvxasynccommand`, hãy đảm bảo rằng` mvx.iocprovider` được khởi tạo trước khi xây dựng các lệnh, như được mô tả trong [1]. Điều này là rất quan trọng cho các kịch bản thử nghiệm đơn vị.Bằng cách làm theo các bước này, bạn sẽ có thể xác định và giải quyết hầu hết các ngoại lệ tham chiếu null liên quan đến xem các ràng buộc trong MVVMcross.
Trích dẫn:[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/fundaments/data-binding