Reactiveui 从另一个命令执行命令
我有一个“hello world”表单(Xamarin表单),带有一些字段和一个提交按钮。有一个可观察的(CanSave),它控制SaveChangesCommand何时可以执行。如果在CanSave为false时按下save按钮,我想向用户显示一条消息 使用下面的代码,如果我Reactiveui 从另一个命令执行命令,reactiveui,Reactiveui,我有一个“hello world”表单(Xamarin表单),带有一些字段和一个提交按钮。有一个可观察的(CanSave),它控制SaveChangesCommand何时可以执行。如果在CanSave为false时按下save按钮,我想向用户显示一条消息 使用下面的代码,如果我 输入不正确的数据 单击保存(错误消息显示) 然后更正数据 CanSave变为true,并在再次点击按钮之前执行SaveChangesCommand。这就好像之前被阻止的按钮按下被排队,直到canExecute成为现实 我
public PersonalProfileModel()
{
this.SaveChangesCommand=ReactiveCommand.CreateAsyncTask(this.CanSave(),message=>this.doAllThings(消息为字符串));
this.ButtonClickedCommand=ReactiveCommand.Create(Observable.Return(true));
this.ButtonClickedCommand.InvokeCommand(this.SaveChangesCommand);
//ButtonClickedCommand.Subscribe(x=>this.SaveChangesCommand.Execute(“hello”);//也尝试过这个
}
公共反应命令按钮ClickedCommand{get;set;}
公共反应命令保存更改命令;
公共IObservable CanSave()
{
var fieldsValid=this.whenyValue(
x=>x.Name,
x=>x.国家,
(f1,f2)=>
f1==“a”
&&f2==“b”);
返回字段有效;
}
公共任务doAllThings(字符串消息)
{
var result=Task.Run(()=>{return“hello”+message;});
返回结果;
}
这个怎么样:
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命令之间的关系——“当可以执行SaveChanges时,ButtonClicked命令被启用”这被证明是对ReactiveCommands和canExecute行为的误解。
参见谢谢你的帮助,保罗。“ButtonClicked命令在可以执行SaveChanges时启用”这实际上不是我想要的。我希望在CanSave为false时启用按钮单击,以便显示“请输入有效数据”消息。然后,仅当CanSave为true时,才传递到Save命令。有意义吗?我对这个问题做了更多的研究,并将问题修改为我认为更简洁的问题本质。
this.SaveChangesCommand = ReactiveCommand.CreateAsyncTask(
this.CanSave(),
message => this.doAllThings(message as string));
this.ButtonClickedCommand = ReactiveCommand.CreateAsyncObservable(
SaveChangesCommand.CanExecuteObservable.StartWith(true),
x => SaveChangesCommand.ExecuteAsync(x));