可移植类库定义了起始视图模型。这听起来通常很好,但我正在考虑以下问题。您是否已经编写了一个需要更改其起始屏幕/视图模型的iOS通用应用程序或Android应用程序。如果应用程序是手机,则默认视图模型为登录,但如果是平板电脑,则希望使用不同的视图模型作为启动。是否有一种覆盖或控制此功能的方法?
可移植类库定义了起始视图模型。这听起来通常很好,但我正在考虑以下问题。您是否已经编写了一个需要更改其起始屏幕/视图模型的iOS通用应用程序或Android应用程序。如果应用程序是手机,则默认视图模型为登录,但如果是平板电脑,则希望使用不同的视图模型作为启动。是否有一种覆盖或控制此功能的方法?
public class CustomAppStart
: MvxNavigatingObject
, IMvxAppStart
{
public void Start(object hint = null)
{
var auth = Mvx.Resolve<IAuth>();
if (auth.Check())
{
ShowViewModel<HomeViewModel>();
}
else
{
ShowViewModel<LoginViewModel>();
}
}
}
RegisterAppStart(new CustomAppStart());
在您的App类中,您可以注册一个AppStart,它是一个启动画面:
RegisterAppStart<SplashScreenViewModel>()
在这个闪屏界面中,您可以接收一个验证是平板还是手机的服务。您需要创建一个插件来进行此验证。(有其他stackoverflow问题展示如何进行验证 / 如何检测设备是否为Android手机或Android平板?)
public SplashScreenViewModel(ITabletVerificationService tabletVerificationService)
if(tabletVerificationService.IsTablet())
{
ShowViewModel<TabletViewModel>
}
else
{
ShowViewModel<LoginViewModel>
}
这是我对这种情况的实现,如果有帮助的话:
PCL:
public enum PlateformType
{
Android,
iPhone,
WindowsPhone,
WindowsStore
}
public interface IPlateformInfos
{
PlateformType GetPlateformType();
}
public class CustomAppStart
: MvxNavigatingObject
, IMvxAppStart
{
public void Start(object hint = null)
{
var plateformInfos = Mvx.Resolve<IPlateformInfos>();
var plateformType = plateformInfos.GetPlateformType();
switch (plateformType)
{
default:
ShowViewModel<MenuViewModel>();
break;
case PlateformType.WindowsPhone:
case PlateformType.WindowsStore:
ShowViewModel<FirstViewModel>();
break;
}
}
}
PCL App.cs:
RegisterAppStart(new CustomAppStart());
用户界面(例如:WindowsPhone):
public class PlateformInfos : IPlateformInfos
{
public PlateformType GetPlateformType()
{
return PlateformType.WindowsPhone;
}
}
UI Setup.cs:
protected override void InitializeFirstChance()
{
Mvx.RegisterSingleton<IPlateformInfos>(new PlateformInfos());
base.InitializeFirstChance();
}
非常简单的方法。