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项目都会很棒.我已经到处搜寻了!
几个月前我也有同样的想法,因为我真的很喜欢 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 所提供的最佳功能。
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |