AsyncCommand CanExecute 处理程序

AsyncCommand CanExecute handler

我在 WPF (.NET 4.0) 中使用 @Stephen-Cleary AsyncCommand implementation,现在我正试图了解如何在命令定义期间指定 CanExecute 处理程序。

通常我会这样创建命令:

            SaveCommandAsync = AsyncCommand.Create(async token =>
            {
                //async code    
            });

我没有看到任何 Create 重载,因此我可以指定 CanExecute 逻辑。

谢谢,

伊戈尔

使用 Stephen Cleary 的 Nito.Mvvm.Async 项目来实现您的需求。

添加对 package 的 nuget 引用: <package id="Nito.Mvvm.Async" version="1.0.0-eta-05" targetFramework="net45" />

创建 Xaml 绑定:

<Button Content="Toggle" Command="{Binding MyAsyncCommand}"></Button>

创建 CustomAsyncCommand,指定 CanExecute 函数

MyAsyncCommand = new CustomAsyncCommand(AsyncAction, x=> !_isWorking);

在 AsyncAction 中做一些异步工作

private async Task AsyncAction(object obj) {
    _isWorking = true;
    MyAsyncCommand.OnCanExecuteChanged();
    await Task.Delay(2000);
    _isWorking = false;
    MyAsyncCommand.OnCanExecuteChanged();
}

最后:enjoy.