2
我在WPF應用程序中使用反應式UI。 有基類驗證:ReactiveUI ReactiveCommand canExecute using Subject <bool> not working
public abstract class ReactiveValidatingScreen : ReactiveScreen
{
public Subject<bool> ValidationObservable { get; } = new Subject<bool>();
private void Validate(string propertyName)
{
// ... some logic
var isValid = GetValidationResult();
ValidationObservable.OnNext(isValid);
}
}
,並查看模型:
public sealed class UserLoginViewModel : ReactiveValidatingScreen
{
public UserLoginViewModel()
{
Login = ReactiveCommand.CreateAsyncTask(ValidationObservable, x => LoginImpl());
}
}
我的登錄按鈕始終關閉,而有一個叫:
ValidationObservable.OnNext(true);
在驗證通過。
但如果我更改爲:
public sealed class UserLoginViewModel : ReactiveValidatingScreen
{
public UserLoginViewModel()
{
var canLogin = this.WhenAnyValue(x => x.UserName, x => !string.IsNullOrEmpty(x) && x.Length == 3);
Login = ReactiveCommand.CreateAsyncTask(canLogin, x => LoginImpl());
}
}
它做工精細,符合市場預期。
ReactiveUI版本 - 6.5.0
謝謝你的回答。你迫使我進行更多的調查。這是我的錯(問題是我的訂閱代碼中的'Changed'事件,默認的'Scheduler'被'Throttle'使用,我將它改爲'Scheduler.CurrentThread'並開始工作。 –