簡體   English   中英

我應該如何使用 Avalonia(ReactiveUI) 控制命令的可執行性?

[英]How should I make a controlling executability of command using Avalonia(ReactiveUI)?

我正在嘗試根據本指南實現控制 ReactiveUI 命令的可執行性: 指南
但我遇到了一個例外:“由於 object 的當前 state,操作無效。”
我應該如何解決這個問題?
我的代碼示例:

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)); .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM