Xamarin.forms ReactiveUI 7.0,ReactiveCommand,订阅从不触发?

Xamarin.forms ReactiveUI 7.0,ReactiveCommand,订阅从不触发?,xamarin.forms,system.reactive,reactiveui,Xamarin.forms,System.reactive,Reactiveui,我正试着对reactiveUI了如指掌,它最近从6.5.2更新到了7.0,并且似乎包含了一些关于ReactiveCommand的突破性更改 例如,这曾经奏效: 在ViewModel中: public-ReactiveCommand-DoLogin; ... DoLogin=ReactiveCommand.CreateAncyncTask( 异步x=>{ IsBusy=true; 等待任务。延迟(2500); IsBusy=false; 返回单位。默认值; }); 鉴于: //绑定命令 Obse

我正试着对reactiveUI了如指掌,它最近从6.5.2更新到了7.0,并且似乎包含了一些关于ReactiveCommand的突破性更改

例如,这曾经奏效:

在ViewModel中:

public-ReactiveCommand-DoLogin;
...
DoLogin=ReactiveCommand.CreateAncyncTask(
异步x=>{
IsBusy=true;
等待任务。延迟(2500);
IsBusy=false;
返回单位。默认值;
});
鉴于:

//绑定命令
Observable.FromEventPattern(x=>loginButton.Clicked+=x,x=>loginButton.Clicked-=x)
.Subscribe(args=>ViewModel.DoLogin.Execute(null));
//在多洛金完成后做点什么
此.whenObservable(x=>x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.订阅(x=>{
显示警报(“登录完成”、“欢迎”、“确定”);
} 
);
但现在在reactiveui 7.0中,情况有所不同,我必须进行一些更改,但我无法使其正常工作:

在ViewModel中:

public-ReactiveCommand-DoLogin;
...
DoLogin=ReactiveCommand.CreateFromTask(
异步x=>{
IsBusy=true;
等待任务。延迟(2500);
IsBusy=false;
返回单位。默认值;
});
鉴于:

//绑定命令
Observable.FromEventPattern(x=>loginButton.Clicked+=x,x=>loginButton.Clicked-=x)
.Subscribe(args=>ViewModel.DoLogin.Execute());
//在多洛金完成后做点什么
此.whenObservable(x=>x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.订阅(x=>{
显示警报(“登录完成”、“欢迎”、“确定”);
} 
);
命令代码仍会执行,但WhenObservable Subscribe部分永远不会触发。它从不显示我的DisplayAlert


我使用的是Xamarin表单,如果这很重要的话,但即使在Windows表单中,我也会得到相同的行为。

问题是现在
Execute()
是一个冷可观察的对象,因此不调用

ViewModel.DoLogin.Execute()

你必须打电话

ViewModel.DoLogin.Execute().Subscribe()

您可以在(ctrl+F“ReactiveCommand更好”)中阅读有关
ReactiveCommand
中更改的更多信息

顺便说一句,通过在视图中使用绑定,而不是使用
Observable.FromEventPattern
,您的生活可能会变得更轻松。这在中进行了描述。这样,您将避免在另一个
Subscribe
调用中出现
Subscribe
调用,这是一种代码气味。代码应与此类似:

this.BindCommand(
    this.ViewModel,
    vm => vm.DoLogin,
    v => v.loginButton);

另一个旁注-
ReactiveCommand
IsExecuting
公开为可观察属性,因此您可能不需要单独的标志
IsBusy

是的,很好。我设法解决了这个问题。现在干净多了。当我试图学习一些我不懂的东西时,这很难,同时语法也会改变!