如何将 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);
我想 运行 异步执行按钮命令。以下应用程序可以 运行 异步。但是我找不到如何将我在 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);