【发布时间】:2018-02-02 10:04:07
【问题描述】:
我们正在使用 xamarin.forms 和 MVVM 模式开发应用程序。我们使用内置导航系统来推送和弹出页面。现在我们在使用命令导航页面时遇到了问题。
假设我们有一个带有导航到另一个页面的按钮的视图。此导航是通过将 viewmodel 命令绑定到按钮来完成的。该命令有一个 canExecute 检查,检查“IsBusy”属性,以防止按钮被单击两次,并启动两个页面导航。
示例代码:
查看:
<Button Command={Binding NavigateCommand} />
viewmodel(我省略了 notifypropertychanged 和 ChangeCanExecute 调用,它们确实存在):
Public bool IsBusy {get => _isBusy set => {_isBusy = value;}}
Public ICommand NavigateCommand = New Command(Navigate, () => !IsBusy);
async private Task Navigate()
{
IsBusy = true;
await Navigation.PushAsync(new OtherPage());
IsBusy = false;
}
现在你会说这行得通,这确实行得通。但是,我们已经在 Android 中实现了自定义过渡动画,该动画将新页面从右侧滑入视图,并通过将旧页面滑出视图来移除左侧。问题是,PushAsync 方法正在等待,但它在页面加载后立即完成,但在将其移入视图的动画完成之前。所以在过渡动画期间,可以再次执行命令,仍然可以执行两次命令。
TLDR: 使用 PushAsync 时有什么方法可以等待页面过渡动画完成?
【问题讨论】:
标签: c# mvvm xamarin.forms navigation