PushModalAsync允许多次按下按钮,我怎样才能使它只能点击一次?

时间:2017-11-02 11:07:41

标签: c# xamarin

我正在尝试使用

Navigation.PushModalAsync(new PageName);

但是它允许多次按下按钮,这意味着应用程序中会出现多个同一页面,我认为它适用于PushAsync,但我希望某些页面可以使用PushModalAsync

2 个答案:

答案 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));