При використанні `mvxview` і` mvxviewController` в Mvvmcross може виникнути кілька загальних підводних каменів. Розуміння цих питань може допомогти розробникам уникнути їх та забезпечити більш плавний розвиток.
1. Введіть проблеми конверсії **
Одна поширена проблема - перетворення типу. У шаблоні MVVM властивості, визначені в ViewModel, можуть бути безпосередньо споживачами користувача. Наприклад, властивість зображення може бути байковим масивом, але інтерфейс користувача очікує його як джерела зображення. MVVMCross забезпечує інтерфейс `imvxvalueconverter` для обробки таких перетворень, але він вимагає лиття, що може бути громіздким. Загальний клас `mvxvalueconverter` допомагає, дозволяючи чітко вказати типи введення та виводу [1].2. Управління життєвим циклом **
Починаючи з mvvmcross 5.0, ViewModels поєднуються з життєвим циклом зору, забезпечуючи такі методи, як `` `)`, `з'являються ()`, `espayering ()`, і `зникають ()`. Незважаючи на те, що ці методи пропонують більше контролю над станом ViewModel, вони не є на 100% надійними і можуть впливати на конкретні події на платформі або власну логіку додатків [2] [7]. Забезпечення належної обробки цих подій життєвого циклу має вирішальне значення.3. Проблеми прив'язки **
Проблеми зв'язування можуть виникати, особливо при використанні власних переглядів або елементів управління. Наприклад, якщо створено користувальницьке управління до того, як будуть доступні дані ViewModel, `dataContext` може бути нульовим. Використання `DelawsBind` може допомогти вирішити це, затримуючи прив'язку, поки дані не будуть доступні [4].4. Повторне використання ViewModels **
ViewModels в MVVMcross, особливо на iOS, можуть ставати щільно поєднаними з конкретними поглядами, зменшуючи їх повторне використання. Це трапляється, коли ViewModels обробляє логіку, що стосується огляду, наприклад, форматування мітків або діє як джерела даних для перегляду таблиці. Щоб уникнути цього, тримайте ViewModels, зосереджені на бізнес-логіці та використовуйте перетворювачі або інші механізми для обробки конкретних перетворень [3].5. Навігація з-за платформи **
MVVMCross підтримує міжплатформну навігацію, але кожна платформа має унікальні шаблони презентації. Наприклад, на iOS, використання розповідей для потоку екрану може суперечити перехресному підході MVVMCross. Найкраще обробляти логіку навігації в ViewModel та використовувати специфічні для платформи ведучі, щоб керувати тим, як відображаються представлення [5] [9].6. Лінкер безпеки **
MVVMcross не є лайнерним, це означає, що частини рамки можуть бути позбавлені лінкера під час компіляції. Це може призвести до помилок часу виконання. Щоб запобігти цьому, вам потрібно натякнути на лінкер, щоб зберегти необхідні частини рамки [6].Зважаючи на ці потенційні підводні камені, розробники можуть краще орієнтуватися на складності використання `mvxView` та` MvxViewController` у програмах mvvmcross.
Цитати:[1] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[2] https://www.mvvmcross.com/mvvmcross-5-release/
[3] https://www.danielhall.io/the-problems-with-mvvm-on-ios
[4] https://stackoverflow.com/questions/56531225/problem-with-binding-to-mvxview-with-xamarin-ios-and-mvvmcross
[5] https://kerry.lothrop.de/ios-ui-with-mvvmcross/
[6] https://github.com/mvvmcross/mvvmcross/issues/4286
[7] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[8] https://stackoverflow.com/questions/45966067/mvvmcross-iphone-and-ipad-best-practices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters