我有一个'hello world'表单(Xamarin表单),包含一些字段和提交按钮。有一个可观察的(CanSave)控制SaveChangesCommand何时可以执行。如果在CanSave为false时按下保存按钮,我想向用户显示一条消息。
使用下面的代码,如果我
CanSave变为true并且执行SaveChangesCommand - 再次按下按钮之前。好像先前阻止的按钮按下排队,直到canExecute成为真。
我错过了什么?
谢谢: - )
public PersonalProfileModel()
{
this.SaveChangesCommand = ReactiveCommand.CreateAsyncTask(this.CanSave(), message => this.doAllThings(message as string));
this.ButtonClickedCommand = ReactiveCommand.Create(Observable.Return(true));
this.ButtonClickedCommand.InvokeCommand(this.SaveChangesCommand);
// ButtonClickedCommand.Subscribe(x => this.SaveChangesCommand.Execute("hello")); // tried this too
}
public ReactiveCommand<object> ButtonClickedCommand { get; set; }
public ReactiveCommand<string> SaveChangesCommand;
public IObservable<bool> CanSave()
{
var fieldsValid = this.WhenAnyValue(
x => x.Name,
x => x.Country,
(f1, f2) =>
f1 == "a"
&& f2 == "b");
return fieldsValid;
}
public Task<string> doAllThings(string message)
{
var result = Task.Run(() =>{return "hello " + message;});
return result;
}
答案 0 :(得分:1)
这个怎么样:
this.SaveChangesCommand = ReactiveCommand.CreateAsyncTask(
this.CanSave(),
message => this.doAllThings(message as string));
this.ButtonClickedCommand = ReactiveCommand.CreateAsyncObservable(
SaveChangesCommand.CanExecuteObservable.StartWith(true),
x => SaveChangesCommand.ExecuteAsync(x));
现在我们根据SaveChangesCommand明确描述ButtonClicked命令之间的关系 - &#34;当SaveChanges可以被执行时,ButtonClicked命令被启用&#34;
答案 1 :(得分:0)
这对ReactiveCommands和canExecute的行为造成了误解。 见ReactiveCommand not respecting canExecute