![](/img/trans.png)
[英]How do I use a Reactive User Control as a template for displaying a list of View Models in a List Box using Avalonia and 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.