如何解决我应该如何使用 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 举报,一经查实,本站将立刻删除。