ReactiveProperty 初始值
ReactiveProperty initial value
我正在尝试为 public ReactiveProperty<string> ConnectionStatus
设置一个初始值。
public ViewModelConstructor()
{
ConnectionStatus = Observable
.Interval(RefreshInterval)
.Select(x => Observable.FromAsync(() => networkDiscovererService.CanDiscoverAsync("192.168.1.1", RequestTimeout)))
.Concat()
.Select(isConnected => isConnected ? $"connected" : $"not connected")
.ToReactiveProperty();
}
即使我试图像这样实例化它
public ReactiveProperty<string> ConnectionStatus { get; } =
new ReactiveProperty<string>("Checking connectivity...");
它仍然是空的,直到观察到 returns 东西。
有什么想法吗?我正在使用这个 library.
使用 ReactiveProperty ctor 获取订阅的初始值(如 behaviorSubject 或 Replay(1)):
[Test]
public void ShouldReturnAValuOnSubscribe()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = new ReactiveProperty<int>(30);
reactiveProperty.Subscribe(testableObserver);
Assert.AreEqual(30, testableObserver.Messages.Single().Value.Value);
}
使用 .ToReactiveProperty() 获取订阅的初始值(如 behaviorSubject 或 Replay(1)):
[Test]
public void ShouldReturnAValuOnToReactiveProperty()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = Observable.Never<int>().ToReactiveProperty(40);
reactiveProperty.Subscribe(testableObserver);
Assert.AreEqual(40, testableObserver.Messages.Single().Value.Value);
}
不要在订阅时获取初始值 - 更改 ReactivePropertyMode:
[Test]
public void ShouldNotReturnAnInitialValue_WhenModeIsNone_AndOnSubscribe()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = new ReactiveProperty<int>(30, ReactivePropertyMode.None);
reactiveProperty.Subscribe(testableObserver);
Assert.IsEmpty(testableObserver.Messages);
}
基本上,您要查找的是 初始值 和 ReactivePropertyMode.RaiseLatestValueOnSubscribe 标志。
在第一种情况下,您忘记为 ToReactiveProperty() 提供初始值(例如 ToReactiveProperty(30))
在第二种情况下它应该对您有用 - 默认情况下模式设置为 ReactivePropertyMode.RaiseLatestValueOnSubscribe(检查 ShouldReturnAValuOnSubscribe)。尝试明确设置模式(如 ShouldNotReturnAnInitialValue_WhenModeIsNone_AndOnSubscribe)。
我使用了 ReactiveProperty 3.6.0。
顺便说一句,基于计时器测试连接不是一个好主意:)
我正在尝试为 public ReactiveProperty<string> ConnectionStatus
设置一个初始值。
public ViewModelConstructor()
{
ConnectionStatus = Observable
.Interval(RefreshInterval)
.Select(x => Observable.FromAsync(() => networkDiscovererService.CanDiscoverAsync("192.168.1.1", RequestTimeout)))
.Concat()
.Select(isConnected => isConnected ? $"connected" : $"not connected")
.ToReactiveProperty();
}
即使我试图像这样实例化它
public ReactiveProperty<string> ConnectionStatus { get; } =
new ReactiveProperty<string>("Checking connectivity...");
它仍然是空的,直到观察到 returns 东西。
有什么想法吗?我正在使用这个 library.
使用 ReactiveProperty ctor 获取订阅的初始值(如 behaviorSubject 或 Replay(1)):
[Test]
public void ShouldReturnAValuOnSubscribe()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = new ReactiveProperty<int>(30);
reactiveProperty.Subscribe(testableObserver);
Assert.AreEqual(30, testableObserver.Messages.Single().Value.Value);
}
使用 .ToReactiveProperty() 获取订阅的初始值(如 behaviorSubject 或 Replay(1)):
[Test]
public void ShouldReturnAValuOnToReactiveProperty()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = Observable.Never<int>().ToReactiveProperty(40);
reactiveProperty.Subscribe(testableObserver);
Assert.AreEqual(40, testableObserver.Messages.Single().Value.Value);
}
不要在订阅时获取初始值 - 更改 ReactivePropertyMode:
[Test]
public void ShouldNotReturnAnInitialValue_WhenModeIsNone_AndOnSubscribe()
{
var testScheduler = new TestScheduler();
var testableObserver = testScheduler.CreateObserver<int>();
var reactiveProperty = new ReactiveProperty<int>(30, ReactivePropertyMode.None);
reactiveProperty.Subscribe(testableObserver);
Assert.IsEmpty(testableObserver.Messages);
}
基本上,您要查找的是 初始值 和 ReactivePropertyMode.RaiseLatestValueOnSubscribe 标志。
在第一种情况下,您忘记为 ToReactiveProperty() 提供初始值(例如 ToReactiveProperty(30))
在第二种情况下它应该对您有用 - 默认情况下模式设置为 ReactivePropertyMode.RaiseLatestValueOnSubscribe(检查 ShouldReturnAValuOnSubscribe)。尝试明确设置模式(如 ShouldNotReturnAnInitialValue_WhenModeIsNone_AndOnSubscribe)。
我使用了 ReactiveProperty 3.6.0。
顺便说一句,基于计时器测试连接不是一个好主意:)