2017-11-02 12 views
0

私はPushModalAsyncでは複数のボタンを押すことができますが、どうすれば1回だけクリックできますか?

Navigation.PushModalAsync(new PageName); 

を使用しようとしていますが、ボタンが押されるため、それは同じページの複数を意味し、複数回、私はそれがPushAsyncのために働いてきた、アプリに表示されますことができますが、私はいくつかのページへの希望PushModalAsyncを使用してください。

答えて

0

非同期呼び出しなので、Navigation.pushmodelasyncの前に待機してください。でデリゲートを渡すあなたが行うすべてがあるコマンドのインスタンスを作成するときに今

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; 
    } 

await Navigation.PushModalAsync(new PageName); 
0

あなたは、これがおそらく最も便利な解決策になるコマンドにあなたのボタンを結合していると仮定すると、ナビゲーションコールとコマンドは、コールの結果を待ってから、それ以降のコールのためにロック解除されます。だから、どこかにあなたが

MyNavigationButton = new AwaitingCommand(() => Navigation.PushModalAsync(yourpage)); 
のようなコードを記述します

関連する問題