我正在尝试使用
Navigation.PushModalAsync(new PageName);
但是它允许多次按下按钮,这意味着应用程序中会出现多个同一页面,我认为它适用于PushAsync
,但我希望某些页面可以使用PushModalAsync
。
答案 0 :(得分:0)
在Navigation.pushmodelasync前面添加await,因为它是一个异步调用。
await Navigation.PushModalAsync(new PageName);
答案 1 :(得分:0)
假设您将按钮绑定到命令,这可能是最方便的解决方案:
public class AwaitingCommand : ICommand
{
private bool _isBusy;
private Action<object> _callback;
/// <inheritdoc />
public AwaitingCommand(Action<object> callback)
{
_callback = callback;
}
/// <inheritdoc />
public bool CanExecute(object parameter)
{
return !_isBusy;
}
/// <inheritdoc />
public async void Execute(object parameter)
{
if (!_isBusy)
{
SetBusy(true);
await Task.Factory.StartNew(() => _callback?.Invoke(parameter), CancellationToken.None, TaskCreationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
SetBusy(false);
}
}
private void SetBusy(bool busy)
{
_isBusy = busy;
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
/// <inheritdoc />
public event EventHandler CanExecuteChanged;
}
现在,在创建命令实例时,您只需通过导航调用传递一个委托,命令将确保等待调用结果,然后再解锁以进一步调用。
所以在某处你会编写像
这样的代码MyNavigationButton = new AwaitingCommand(() => Navigation.PushModalAsync(yourpage));