EonaCat Commands GiveCommand (Relay) AsyncCommand ManualResetCommand CancelAsyncCommand Bindable object
$ dotnet add package EonaCat.CommandsAsyncCommand: (without parameters)
private IAsyncCommand test1;
public IAsyncCommand Test1 => test1 ??= AsyncCommand.Create(async () => {
await Task.CompletedTask;
});
private IAsyncCommand test2;
public IAsyncCommand Test2 => test2 ??= AsyncCommand.Create(async token => {
await Task.CompletedTask;
});
private IAsyncCommand test3;
public IAsyncCommand Test3 => test3 ??= AsyncCommand.Create(async (token, manual) => {
await Task.CompletedTask;
});
AsyncCommand: (with parameters)
private IAsyncCommand test1;
public IAsyncCommand Test1 => test1 ??= AsyncCommand.Create<Data>(async data => {
await Task.CompletedTask;
});
private IAsyncCommand test2;
public IAsyncCommand Test2 => test2 ??= AsyncCommand.Create<Data>(async (data, token) => {
await Task.CompletedTask;
});
private IAsyncCommand test3;
public IAsyncCommand Test3 => test3 ??= AsyncCommand.Create<Data>(async (data, token, manual) => {
manual.WaitOne();
if (token.IsCancellationRequested) return;
await Task.CompletedTask;
});
AsyncCommand: (return a completed task)
private IAsyncCommand test1;
public IAsyncCommand Test1 => test1 ??= AsyncCommand.Create(() => {
return Task.CompletedTask;
});
AsyncCommand: (Check if we need to cancel the command)
private IAsyncCommand test4;
public IAsyncCommand Test4 => test4 ??= AsyncCommand.Create(async token => {
if (token.IsCancellationRequested) return;
await Task.CompletedTask;
}, true);
Binding for XAML:
<StackLayout>
<Label Text="Command Result:" />
<Label Text="{Binding Test1.Execution.Result}" />
<Label Text="{Binding Test1.Execution.IsCompleted}" />
<Label Text="{Binding Test1.Execution.IsNotCompleted}" />
<Label Text="{Binding Test1.Execution.IsCompletedSuccessfully}" />
<Label Text="{Binding Test1.Execution.IsCanceled}" />
<Label Text="{Binding Test1.Execution.IsFaulted}" />
<Label Text="{Binding Test1.Execution.ErrorMessage}" />
<Button Command = "{Binding Test1}" CommandParameter="ThisIsATest">Test</Button>
<Button Command = "{Binding Test1.CancelCommand}">Cancel</Button>
<Button Command="{Binding Test1.ManualResetAsyncCommand}">Create Timeout</Button>
<Label Text = "{Binding Test1.IsSuspend}" />
</StackLayout>