为什么WhenAnyValue在订阅时可观察到触发



我有以下伪视图模型:

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); }
    }
}

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

我想这只是"设计"。CCD_ 1和朋友总是返回初始值。这在大多数情况下都是有意义的——例如,如果在末尾使用ToProperty,并且通常希望您的属性具有初始值。

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

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

相关内容

  • 没有找到相关文章

最新更新