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.
我在 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.