У меня есть форма «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;
}
Я больше общался с этим и пересматривал вопрос на то, что, по моему мнению, является более кратким сущностью проблемы. http://stackoverflow.com/q/25636199/494635 –