为什么 WhenAnyValue observable 会触发订阅?

Why does WhenAnyValue observable trigger on subscription?

我有以下虚拟视图模型:

public class DummyViewModel : ReactiveObject
{
    internal DummyViewModel()
    {
        ItemChanged.Subscribe(_ => Console.WriteLine());
    }

    public IObservable<string> ItemChanged
    {
        get { return this.WhenAnyValue(x => x.Item).Select(s => s); }
    }

    private string _item;

    public string Item
    {
        get { return _item; }
        set { this.RaiseAndSetIfChanged(ref _item, value); }
    }
}

当我创建此 class 的新实例时,可观察对象会在订阅时立即触发,返回 null(没有任何内容绑定到 Item)。这在我的更高级的视图模型中导致了一个问题,我有多个需要以不同方式链接在一起的可观察对象。我一直在使用 Skip 和 StartWith 的组合,但它变得相当复杂。有人可以告诉我为什么会这样吗?我是否应该考虑其他方法?

我猜只是 'by design'。 WhenAny和朋友总是return初始值。这在大多数情况下是有意义的——例如,如果您在末尾使用 ToProperty,并且您通常希望 属性 获得初始值。

显然我不知道您的应用程序的详细信息,但我有两个大小适中的应用程序,想不出需要跳过初始值的时间。

在内部,WhenAny 委托给 ObservableForProperty 并且 ObservableForProperty 有一个 skipInitial 参数。所以你可以使用它。或者只是 .Skip(1).