在MonoDroid/MonoTouch中使用ViewModels

Oli*_*old 9 mono mvvm xamarin.ios xamarin.android

我决定在MonoDroid和MonoTouch中稍微涉足并将我的一个WP7应用程序作为入门者.我真的想重用我现有的ViewModel,但由于Android和iOS似乎都没有XAML强大的数据绑定,我想问一下之前是否有人走过这条路线并且可以推荐一些最佳实践或现有解决方案.

jon*_*ers 5

我们现在正在使用一个应用程序,但首先为iOS编写(甚至在Windows之前).它肯定没有充满彩虹和小马.

我会推荐以下内容:

  • 在Windows上使用MVVM框架,不要求您在用户执行的每个操作(例如Caliburn)上公开ICommand ,它也不应该要求从所有ViewModel中依赖它.
  • 有条件地继承ViewModelBase类的WPF特定部分,您可以使用部分类或#if iPhone指令来执行此操作.INotifyPropertyChanged或ICommand就是例子.
  • 使用IoC容器,将诸如保存设置保存到文件系统之类的内容非常有用,这在所有平台上都是非常不同的.还有助于整理您的依赖项,这对于将特定于平台的代码与特定于非平台的代码分离非常有用.
  • 使用某种类型的"信使"(此处为示例),通常包含在MVVM框架中.在我看来,这是必须的,至少在iOS上是这样.Apple的MVC如此遍布全球,最好能够以弱引用(和解耦)方式订阅全局消息.
  • 像在本机上一样在每个平台上使用MVC,然后像对待手动调用每个ViewModel一样对待它.没有UI绑定,没有ICommand,因此请保持ViewModel的简单性.
  • 链接文件是有史以来最好的技巧.您不希望每个平台都有每个视图模型的副本,因此请确保您知道如何链接到Visual Studio和MonoDevelop中项目中的文件.这也使得#if iPhone#if Android陈述成为可能.

我知道你正在使用现有的应用程序,所以很难.重用您的业务模型可能更简单,就是这样.Android和iOS都有自己的MVC模式,与WPF截然不同.您可能还需要移动设备上每个ViewModel的子集,这样可以更容易地重写.

在我们的情况下:

  • 我们正在使用TinyIoC(也有它自己的信使)
  • 当我们开始使用WPF时,我们将使用Caliburn-Micro,我们不需要完整Caliburn中的某些功能