首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncCommand CanExecute处理程序

AsyncCommand CanExecute处理程序
EN

Stack Overflow用户
提问于 2016-11-30 11:47:17
回答 2查看 778关注 0票数 4

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

通常,我创建这样的命令:

代码语言:javascript
复制
            SaveCommandAsync = AsyncCommand.Create(async token =>
            {
                //async code    
            });

我没有看到任何创建重载,所以我可以指定CanExecute逻辑。

谢谢,

Igor

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 14:28:19

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

将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中做了一些异步工作

代码语言:javascript
复制
private async Task AsyncAction(object obj) {
    _isWorking = true;
    MyAsyncCommand.OnCanExecuteChanged();
    await Task.Delay(2000);
    _isWorking = false;
    MyAsyncCommand.OnCanExecuteChanged();
}

最后是:尽情享受

票数 6
EN

Stack Overflow用户

发布于 2022-08-09 07:34:24

只是为了更新这个话题。

目前,AsyncCommand的实际参考实现是在CommunityToolkit.Mvvm.Input项目中进行的,可以用A固有的NuGet进行引用。在代码中,它可以写成这样:

代码语言:javascript
复制
// In properties declaration
public IAsyncRelayCommand MyCommand { get; }
// In ctor
MyCommand = new AsyncRelayCommand(MyAction, () => MyCanExecute());
// Action declaration
private async Task MyAction() // Also could be a (CancellationToken token)
{ }
// Can exectute declaration
private bool DownloadTextCanExecute()
{ return !MyCommand.IsRunning; }

请注意,CanExecute不启用或禁用绑定到a固有命令的按钮。它只允许执行命令。如果您希望通过启用或禁用按钮来表示CanExecute,则可以在XAML中使用如下内容:

代码语言:javascript
复制
<Button
        Content="Click me!"
        Command="{Binding MyCommand}"
        IsEnabled="{Binding MyCommand.IsRunning, Converter={StaticResource InverseBooleanConverter}, Mode=OneWay}"/>

您可以在其他答案中找到InverseBooleanConverter的实现。或者您可以看到演示项目WpfAsyncCommandExample的完整代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40887595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档