【问题标题】:How should I make a controlling executability of command using Avalonia(ReactiveUI)?我应该如何使用 Avalonia(ReactiveUI) 控制命令的可执行性?
【发布时间】:2021-08-25 23:21:32
【问题描述】:

我正在尝试根据本指南实现控制 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;
    }

}

【问题讨论】:

    标签: c# reactiveui avaloniaui


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-10-08
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多