微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该如何使用 Avalonia(ReactiveUI) 控制命令的可执行性?

如何解决我应该如何使用 Avalonia(ReactiveUI) 控制命令的可执行性?

我正在尝试根据本指南实现控制 ReactiveUI 命令的可执行性:guide
但我收到一个异常:“由于对象的当前状态,操作无效。”
我该如何解决
我的代码示例:

public class CreateBookviewmodel : viewmodelBase
{
    IObservable<bool> canExecuteCreateBookCommand;
    private string? name;
    private string? path;
    public ReactiveCommand<Unit,Unit> ChangePathCommand { get; }
    public ReactiveCommand<Unit,EditBookviewmodel?> CreateBookCommand { get; }


    public string? Name 
    {
        get => name;
        set => this.RaiseAndSetIfChanged(ref name,value);
    }
    public string? Path
    {
        get => path;
        set => this.RaiseAndSetIfChanged(ref path,value);
    }

    public CreateBookviewmodel()
    {
        canExecuteCreateBookCommand = this.WhenAnyValue(x => x.path,x => x.name,(name,path) =>
            !string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(path));
        ChangePathCommand = ReactiveCommand.CreateFromTask(runchangePath);
        CreateBookCommand = ReactiveCommand.Create(runcreateBook,canExecuteCreateBookCommand);
    }

    private async Task runchangePath()
    {
       var dialog = new OpenFolderDialog();
       Path = await dialog.ShowAsync(CreateBookWindow.Instance);
    }

    private  EditBookviewmodel? runcreateBook()
    {
        if(name!= null && path!= null)
        {
            EditBookviewmodel book = new EditBookviewmodel(name,path);
            return book;
        }
        return null;
    }

}

解决方法

this.WhenAnyValue 中,您的选择器表达式指向字段而不是属性。将其更改为 this.WhenAnyValue(x => x.Path,x => x.Name,(name,path) => !string.IsNullOrWhiteSpace(name) && !string.IsNullOrWhiteSpace(path));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。