为什么 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)
.
我有以下虚拟视图模型:
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)
.