私はPushModalAsyncでは複数のボタンを押すことができますが、どうすれば1回だけクリックできますか?
Navigation.PushModalAsync(new PageName);
を使用しようとしていますが、ボタンが押されるため、それは同じページの複数を意味し、複数回、私はそれがPushAsync
のために働いてきた、アプリに表示されますことができますが、私はいくつかのページへの希望PushModalAsync
を使用してください。
私はPushModalAsyncでは複数のボタンを押すことができますが、どうすれば1回だけクリックできますか?
Navigation.PushModalAsync(new PageName);
を使用しようとしていますが、ボタンが押されるため、それは同じページの複数を意味し、複数回、私はそれがPushAsync
のために働いてきた、アプリに表示されますことができますが、私はいくつかのページへの希望PushModalAsync
を使用してください。
非同期呼び出しなので、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);
あなたは、これがおそらく最も便利な解決策になるコマンドにあなたのボタンを結合していると仮定すると、ナビゲーションコールとコマンドは、コールの結果を待ってから、それ以降のコールのためにロック解除されます。だから、どこかにあなたが
MyNavigationButton = new AwaitingCommand(() => Navigation.PushModalAsync(yourpage));
のようなコードを記述します