输入后延迟 ReactiveUI 验证

问题描述 投票:0回答:1

我想检查输入的用户名是否已存在于数据库中。我有一个异步查询,但我不想在每个输入字符后检查它,而是在输入完成后 1 秒检查。

这是我到目前为止所得到的:

[Reactive]
public string? Username{ get; set; }

[ObservableAsProperty]
public bool IsUsernameExists{ get; }
...
this.WhenAnyValue(x => x.Username)
.Throttle(TimeSpan.FromMilliseconds(1000))
.Select(x => this.UserNameExists.ExecuteAsync(x))
.Select(x => x.Result)
.ToPropertyEx(this, vm => vm.IsUsernameExists);

this.ValidationRule(x => x.Username, x => !this.IsUsernameExists, "Username already exists.");

问题是,当用户名更改时,由于延迟,验证会在更新之前评估 IsUsernameExists。所以验证总是在输入后面 1 个字符。 有谁知道这个问题的解决方案吗?

提前致谢, 伊姆雷·霍尔瓦特

c# validation reactiveui avalonia
1个回答
0
投票

我已经成功了:

        this.ValidationRule(
            vm => vm.Name,
            this.WhenAnyValue(x => x.Name)
            .Throttle(TimeSpan.FromSeconds(0.7), RxApp.TaskpoolScheduler)
            .SelectMany(async x => (await this.BankNameExists.ExecuteAsync(x)) == true ?
            new ValidationState(false, "Name already exists.") : ValidationState.Valid)
            .ObserveOn(RxApp.MainThreadScheduler));
© www.soinside.com 2019 - 2024. All rights reserved.