gpt4 book ai didi

xamarin.forms - ReactiveUI 7.0,ReactiveCommand,订阅永远不会触发?

转载 作者:行者123 更新时间:2023-12-01 17:23:48 24 4
gpt4 key购买 nike

我正在努力研究最近从 6.5.2 更新到 7.0 的 reactiveUI,并且似乎包括一些关于 ReactiveCommand 的重大更改。

EG 这曾经有效:

在 View 模型中:

 public ReactiveCommand<Unit> DoLogin;

...

DoLogin = ReactiveCommand.CreateAsyncTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});

在 View 中:

      //bind the command
Observable.FromEventPattern(x => loginButton.Clicked += x, x => loginButton.Clicked -= x)
.Subscribe(args => ViewModel.DoLogin.Execute(null));

//do something after the dologin is complete
this.WhenAnyObservable(x => x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe( x => {
DisplayAlert("login complete", "welcome", "OK");
}
);

但现在在 reactiveui 7.0 中,情况有所不同,我不得不进行一些更改,但我无法使其正常工作:

在 View 模型中:

  public ReactiveCommand<Unit, Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateFromTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});

在 View 中:

      //bind the command
Observable.FromEventPattern(x => loginButton.Clicked += x, x => loginButton.Clicked -= x)
.Subscribe(args => ViewModel.DoLogin.Execute());

//do something after the dologin is complete
this.WhenAnyObservable(x => x.ViewModel.DoLogin)
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe( x => {
DisplayAlert("login complete", "welcome", "OK");
}
);

命令代码仍会执行,但 WhenANyObservable Subscribe 部分永远不会触发。它从不显示我的 DisplayAlert。

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

最佳答案

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

ViewModel.DoLogin.Execute()

你必须打电话

ViewModel.DoLogin.Execute().Subscribe()

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

顺便说一句 - 您可以通过在 View 中使用绑定(bind)来代替 Observable.FromEventPattern 让您的生活更轻松。这在 docs about ReactiveCommand 中有描述。 .这样,您将避免在另一个 Subscribe 调用中调用 Subscribe,这是一种代码味道。代码应该类似于这样:

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

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

关于xamarin.forms - ReactiveUI 7.0,ReactiveCommand,订阅永远不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40777559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com