Использование ViewModels в MonoDroid / MonoTouch - PullRequest
9 голосов
/ 15 ноября 2011

Я решил немного поболтать в MonoDroid и MonoTouch и портировать одно из моих приложений WP7 в качестве стартера. Я действительно хотел бы повторно использовать мои существующие модели ViewModel, но, поскольку в Android и iOS, похоже, нет такой вещи, как сильная привязка данных XAML, я хотел бы спросить, ходил ли кто-нибудь по этому пути раньше и может ли порекомендовать некоторые лучшие практики или существующие решения.

Ответы [ 2 ]

5 голосов
/ 15 ноября 2011

Мы делаем это сейчас с приложением, но сначала пишем для iOS (даже до Windows).Конечно, он не полон радуг и пони.

Я бы порекомендовал следующее:

  • Использовать инфраструктуру MVVM в Windows, которая не требует показа ICommand при каждом действии.пользователь берет (например, Caliburn ), он также не должен требовать зависимости от него из всех ваших ViewModels.
  • Условно наследовать специфичные для WPF части вашей ViewModelBaseкласс, вы можете сделать это с частичными классами или директивой #if iPhone.INotifyPropertyChanged или ICommand являются примерами.
  • Используйте контейнер IoC, очень полезно абстрагировать такие вещи, как сохранение настроек в файловой системе, которые будут сильно отличаться на всех платформах.Также помогает разобраться с вашими зависимостями, что очень полезно для отделения кода, специфичного для платформы, и не зависящего от платформы.
  • Используйте какой-нибудь "мессенджер" (пример здесь ), обычно включается в инфраструктуру MVVM.Это необходимо по моему мнению, по крайней мере для iOS.MVC от Apple так повсеместно, что лучше иметь глобальные сообщения, на которые вы можете подписаться, со слабой ссылкой (и отсоединить).
  • Используйте MVC на каждой платформе, как вы изначально, а затем обрабатывайте каждую ViewModel какВы бы, если бы вы звонили это вручную.Нет привязок пользовательского интерфейса, нет ICommand, так что держите вашу ViewModel простой.
  • Связывание файлов - лучший трюк в истории.Вам не нужна копия каждой модели представления для каждой платформы, поэтому убедитесь, что вы знаете, как создать ссылку на файл в проектах Visual Studio и MonoDevelop.Это также делает возможными операторы #if iPhone и #if Android.

Я знаю, что вы работаете с существующим приложением, так что это сложно.Может быть проще просто повторно использовать вашу бизнес-модель и все.Android и iOS имеют собственные шаблоны MVC и кардинально отличаются от WPF.Вам также может понадобиться только подмножество каждой ViewModel на мобильных устройствах, что может упростить переписывание.

В нашем случае:

  • Мы используем TinyIoC (также имеется собственный мессенджер)
  • Мы будем использовать Caliburn-Micro , когда мы начнем на WPF, нам не нужны некоторые функции в полной версии Caliburn
3 голосов
/ 22 февраля 2012

Я недавно закончил большой проект, который мы сначала написали для wp7, и который затем был портирован на touch и droid.

В рамках этого мы выпустили нашу собственную инфраструктуру mvvm - включая некоторую поддержку привязки данныхдля сенсорного экрана и дроида - источник доступен по адресу http://github.com/slodge/mvvmcross

Опыт переноса на дроида был хорошим - файлы разметки axml обеспечили хороший хук для привязки данных.В настоящее время, однако, я не так доволен связыванием, которого мы достигли для касания - хотя montouch.dialog иногда, по крайней мере, предоставляет нам некоторый красивый код.

...