是否有人在同一个项目中使用xamarin表单和mvvmcross视图显示任何显示IOS和/或Android本机应用程序的代码示例?
我发现很多样本应用程序都有一个或另一个但没有使用这两个
例如在我调用的ViewModel中:
this.ShowViewModel<MyCustomViewModel>();
在我的iOS项目中,我希望能够创建一个xamarin表单ContentPage或mvvmcross MvxViewController。
即。在我的共同项目中,我将同时拥有两个XForm视图,对于我的更复杂的视图,其中XForms不够丰富,mvvmcross views
任何代码示例或github项目都会很棒。我已经到处搜索过了!
答案 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提供的最佳功能。