xamarin与mvvmcross合作

Bob*_*Bob 5 mvvmcross xamarin xamarin.forms

有没有人在同一个项目中使用xamarin表单和mvvmcross视图显示IOS和/或Android原生应用程序的代码示例?

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

例如,当我调用ViewModel时:

this.ShowViewModel<MyCustomViewModel>();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ido*_*doT 2

几个月前我也有同样的想法,因为我真的很喜欢 MvvmCross 概念,当然还有使用 XForms 实现统一 UI 的优势。

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

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

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

渲染器中的使用示例(取自 Xamarin 示例):

在您的共享项目中,您希望在 iOS 中拥有一个具有不同外观的自定义 Entry,那么您将创建此类:

public class MyEntry : Entry {}
Run Code Online (Sandbox Code Playgroud)

在你的 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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

熟悉 Mvvm light 后,您会发现 viewModel 之间的导航是由名为的组件完成的INavigationService

这是我的应用程序的代码片段:

_navigationService.NavigateTo("UserDetailsPage", user);
Run Code Online (Sandbox Code Playgroud)

我处于视图模型的上下文中,该视图模型表示包含用户列表的页面,当选择特定用户时,我将使用键“UserDetailsPage”调用 NavigationService,该键在配置中注册一个页面,它还接收一个参数“user”。

我还想推荐此视频,以捕捉 MvvmLight 所提供的最佳功能。