问题描述
我正在视图类中显示 2 秒的淡入淡出动画,2 秒后,我想转到视图模型类来运行加载登录页面或注册页面的逻辑
现在它跳过 2 秒动画并直接进入视图模型。知道这里有什么问题
如果我删除了第 BindingContext = new Splashscreenviewmodel();
行,动画会出现,但它不会进入视图模型类
SplashscreenPage.xaml.cs - 视图类
public SplashscreenPage ()
{
InitializeComponent ();
Animation();
BindingContext = new Splashscreenviewmodel();
}
async void Animation()
{
ssImage.Opacity = 0;
await Task.WhenAll(
ssImage.Fadeto(1,2000),ssImage.Scaleto(1.1,2000)
);
}//end of method
启动画面 - 视图模型类
public Splashscreenviewmodel()
{
WhichPagetoLoad();
}
async void WhichPagetoLoad()
{
var getToken = await SecureStorage.GetAsync("Save_Pin_1");
if(getToken == null)
{
var route = $"{ nameof(SignupPage)}";
await Shell.Current.GoToAsync(route);
}
else
{
var route = $"{ nameof(LoginPage)}";
await Shell.Current.GoToAsync(route);
}
}
解决方法
拥有 VM 类或分配 BindingContext
确实没有意义,因为您没有进行任何数据绑定。您可以在动画完成后调用导航代码。您无法从构造函数进行异步调用,因此将动画和导航登录移动到 OnAppearing
中将允许您进行异步调用
public SplashscreenPage ()
{
InitializeComponent ();
}
async override void OnAppearing()
{
ssImage.Opacity = 0;
await Task.WhenAll(
ssImage.FadeTo(1,2000),ssImage.ScaleTo(1.1,2000)
);
var getToken = await SecureStorage.GetAsync("Save_Pin_1");
if(getToken == null)
{
var route = $"{ nameof(SignupPage)}";
await Shell.Current.GoToAsync(route);
}
else
{
var route = $"{ nameof(LoginPage)}";
await Shell.Current.GoToAsync(route);
}
}