【问题标题】:ReactiveCommand IsExecuting changes to false after first emitted valueReactiveCommand IsExecuting 在第一次发出值后更改为 false
【发布时间】:2017-02-17 22:18:34
【问题描述】:

我从一个冷的 observable 创建了一个响应式命令。调用命令时,它会将 IsExecuting 更改为 true,并且在 第一次发出的值 上从 observable 更改回 false。

public class MyViewModel : ReactiveObject
{
    public ReactiveCommand<Unit, long> FooCommand { get; }

    private readonly ObservableAsPropertyHelper<long> _intervals;

    public long Intervals => _intervals.Value;

    public MyViewModel()
    {
        FooCommand = ReactiveCommand.CreateFromObservable(
            () => Observable.Interval(TimeSpan.FromMilliseconds(250))
            .TakeUntil(DateTimeOffset.Now.AddSeconds(2)));
        _intervals = FooCommand.ToProperty(this, vm => vm.Intervals);
    }
}

IsExecuting 不应该在 observable 完成之后更改回 false 而不是在第一个发出的项目上?我在这里错过了什么?

请注意,如果 XAML 以某种方式影响行为,我会使用绑定。

【问题讨论】:

    标签: c# wpf reactiveui


    【解决方案1】:

    正确。当 observable 完成时,IsExecuting 应该变回来。这是一个错误。

    来源: https://github.com/reactiveui/ReactiveUI/issues/1244

    应该修复,但不是在当前版本 (7.1.0) 中。

    【讨论】:

    • 嗨丹尼尔!我知道这样的间隔不会完成,但为了简洁起见,我省略了像 TakeUntil 这样的附加代码。
    • 我改进了这个问题,因为它引起了一些混乱
    • 抱歉,我误读了您的问题。那我同意你的看法。我也希望如此。因此,无论是错误还是有人都有望解释为什么它只等待第一个。
    • 请注意,此错误已修复,并将包含在下一个版本中(希望在下周发布)。 github.com/reactiveui/ReactiveUI/pull/1251
    • @Kent 很有趣,当我查看源代码时,我确实找到了修复错误的测试,但我并没有想到它仍未发布。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多