如何将 CommandParameter 传递给 AsyncCommand?

How can I pass CommandParameter into AsyncCommand?

我想 运行 异步执行按钮命令。以下应用程序可以 运行 异步。但是我找不到如何将我在 xaml 端指定的 CommandParamater 传递到事件中。

我应该做什么样的申请?如果你能帮上忙,我会很高兴。

AsyncCommand.cs & IAsyncCommand

    public interface IAsyncCommand : ICommand
{
    Task ExecuteAsync(object parameter);
}

public class AsyncCommand : AsyncCommandBase
{
    private readonly Func<Task> _command;
    public AsyncCommand(Func<Task> command)
    {
        _command = command;
    }
    public override bool CanExecute(object parameter)
    {
        return true;
    }
    public override Task ExecuteAsync(object parameter)
    {
        return _command();
    }

}

AsyncCommandBase.cs

    public abstract class AsyncCommandBase : IAsyncCommand
{
    public abstract bool CanExecute(object parameter);
    public abstract Task ExecuteAsync(object parameter);
    public async void Execute(object parameter)
    {
        await ExecuteAsync(parameter);
    }
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
    protected void RaiseCanExecuteChanged()
    {
        CommandManager.InvalidateRequerySuggested();
    }
}

ViewModel

   ChangePageCommand = new AsyncCommand(async () => await ChangePageClick());

您可以将委托的类型从 Func<Task>(一种不带参数并返回 Task 的方法)更改为 Func<object, Task>(一种采用单个 object 的方法参数并返回 Task):

private readonly Func<object, Task> _command;
public AsyncCommand(Func<object, Task> command) => _command = command;
public override Task ExecuteAsync(object parameter) => _command(parameter);