У меня есть форма «hello world» (формы Xamarin) с некоторыми полями и кнопкой отправки. Существует наблюдаемая (CanSave), которая контролирует, когда может выполняться команда SaveChangesCommand. Если кнопка сохранения нажата, когда CanSave имеет значение false, я хочу отобразить сообщение пользователю.
С приведенным ниже кодом, если я
- ввести неверные данные
- нажмите «Сохранить» (появится сообщение об ошибке)
- затем исправьте данные.
CanSave становится истинным, и выполняется команда 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;
}