Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Есть ли какие -либо общие ловушки при использовании MVXVIEW и MVXVIEWCONTROLLER в MVVMCROSS


Есть ли какие -либо общие ловушки при использовании MVXVIEW и MVXVIEWCONTROLLER в MVVMCROSS


При использовании `mvxview` и` mvxviewcontroller` в mvvmcross может возникнуть несколько общих ошибок. Понимание этих проблем может помочь разработчикам избежать их и обеспечить более плавное развитие.

1. Введите проблемы конверсии **

Одной из общих проблем является преобразование типа. В шаблоне MVVM свойства, определенные в ViewModel, могут не быть непосредственно потребляемыми с помощью пользовательского интерфейса. Например, свойство изображения может быть байтовым массивом, но пользовательский интерфейс ожидает его как источник изображения. MVVMcross предоставляет интерфейс `imvxvalueConverter` для обработки таких преобразований, но он требует кастинга, который может быть громоздким. Общий класс `mvxvalueconverter` помогает, позволяя вам явно указать типы ввода и вывода [1].

2. Управление жизненным циклом **

Начиная с MVVMcross 5.0, ViewModels связаны с жизненным циклом представления, предоставляя такие методы, как `withing ()`, `worfated ()`, `issearing ()` и `исчезнуть ()`. Хотя эти методы предлагают больший контроль над состоянием ViewModel, они не являются на 100% надежными и могут зависеть от событий, специфичных для платформы, или пользовательской логики приложений [2] [7]. Обеспечение правильной обработки этих событий жизненного цикла имеет решающее значение.

3. Переявляющие проблемы **

Могут возникнуть проблемы с связыванием, особенно при использовании пользовательских представлений или элементов управления. Например, если пользовательский элемент управления создается до того, как будут доступны данные ViewModel, `dataContext` может быть нулевым. Использование `DelayBind` может помочь разрешить это путем задержки привязки до тех пор, пока данные не будут доступны [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-is-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-pad-best-cractices
[9] https://www.mvvmcross.com/documentation/fundamentals/view-presenters