我試圖圍繞reactiveUI,最近從6.5.2更新到7.0,似乎包括一些關於ReactiveCommand的重大變化。ReactiveUI 7.0,ReactiveCommand,訂閱永遠不會觸發?
EG這個曾經工作:
在視圖模型:
public ReactiveCommand<Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateAsyncTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});
在查看:
//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,它是不同的,我不得不做出一些更改,我無法正常工作:
in ViewModel:
public ReactiveCommand<Unit, Unit> DoLogin;
...
DoLogin = ReactiveCommand.CreateFromTask(
async x => {
IsBusy = true;
await Task.Delay(2500);
IsBusy = false;
return Unit.Default;
});
在查看:
//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訂閱部分永遠不會觸發。它從不顯示我的DisplayAlert。
我正在使用Xamarin Forms,如果這很重要,但即使在Windows窗體中我也會得到相同的行爲。
是的,偉大的。我設法解決了這個問題。現在它變得更清潔了。在嘗試學習某些我不明白的東西時遇到了困難,同時語法也發生了變化! – 101chris