xamarin与mvvmcross合作

时间:2015-03-01 23:27:10

标签: xamarin mvvmcross xamarin.forms

是否有人在同一个项目中使用xamarin表单和mvvmcross视图显示任何显示IOS和/或Android本机应用程序的代码示例?

我发现很多样本应用程序都有一个或另一个但没有使用这两个

例如在我调用的ViewModel中:

this.ShowViewModel<MyCustomViewModel>();

在我的iOS项目中,我希望能够创建一个xamarin表单ContentPage或mvvmcross MvxViewController。

即。在我的共同项目中,我将同时拥有两个XForm视图,对于我的更复杂的视图,其中XForms不够丰富,mvvmcross views

任何代码示例或github项目都会很棒。我已经到处搜索过了!

1 个答案:

答案 0 :(得分:2)

几个月前我有完全相同的想法,因为我非常喜欢MvvmCross概念,当然还有使用XForms统一UI的优势。

MvvmCross非常适合使用通用逻辑(共享项目)构建应用程序,并在不同项目(iOS和Android)中使用UI。

但是,这不是必需的,因为所有UI都存储在单个共享项目中,并且可以使用MvvmLight轻松实现导航和所有其他Mvvm模式(请查看this post)。

如果您希望在特定平台中拥有不同的UI,Xamarin表单引入了一个名为Renderers 的新概念 - 您可以在其中调用本机UI功能,就像您在两个不同的UI组件中所做的那样在XForms之前。

Renderer中的用法示例(取自Xamarin示例):

在您的共享项目中,您希望在iOS中拥有具有不同外观的自定义条目,然后您将创建此类:

public class MyEntry : Entry {}

在您的iOS代码中,您希望执行以下操作:

[assembly: ExportRenderer (typeof (MyEntry), typeof (MyEntryRenderer))]
public class MyEntryRenderer : EntryRenderer
{
  // Override the OnElementChanged method so we can tweak this renderer post-initial setup
  protected override void OnElementChanged (ElementChangedEventArgs<Entry> e)
  {
    base.OnElementChanged (e);

    if (Control != null) {   // perform initial setup
      // do whatever you want to the UITextField here!
      Control.BackgroundColor = UIColor.LightGray;
      Control.BorderStyle = UITextBorderStyle.Line;
    }
  }
}

在您熟悉Mvvm灯之后,您会看到viewModel之间的导航由名为INavigationService的组件

完成

以下是我的应用中的代码段:

_navigationService.NavigateTo("UserDetailsPage", user);

我在视图模型的上下文中,它表示包含用户列表的页面,当选择特定用户时,我使用密钥&#39;来调用NavigationService。 UserDetailsPage&#39;,它在页面配置中注册,也接收参数&#39; user&#39;。

我还想推荐this video来捕捉MvvmLight提供的最佳功能。