ObservableAsPropertyHelper 不会触发任何通知



我有这个简单的ViewModel。

public class FrameProcessingViewModel : ReactiveObject
{
    private readonly ObservableAsPropertyHelper<LightWeight> currentDetectionExposer;
    public FrameProcessingViewModel(UnitFactory factory)
    {
        var identifications = factory.Units.SelectMany(unit => unit.Identifications);
        identifications.ToProperty(this, model => model.CurrentDetection, out currentDetectionExposer);
        identifications.Subscribe();
    }
    public LightWeight CurrentDetection => currentDetectionExposer.Value;
}

我在视图中有一个到CurrentDetection属性的Binding,但它不会更新。它总是空的,我不明白为什么。

我做错了什么?

编辑:

好的,我发现问题出在哪里了。唯一到达的"单元"项目是在进行ToProperty调用之前完成的,因此currentDetectionExposer的基础订阅是在项目到达之后完成的,并且从未发生更新。

我的观察依赖于两个来源,这两个来源是ISubject。我通过让他们两个都成为ReplaySubject来解决这个问题,所以每次订阅时都会推送他们的值,但不起作用!

以下内容对我来说很好-你确定你的可观察标识会产生值吗?

另外几点注意事项:身份证明。Subscribe()是不必要的-ToProperty在内部进行订阅,使您的可观察对象在冷态时开始生成值。此外,您通常希望在ToProperty(..)之前放置一个ObserveOn(RxApp.MainThreadScheduler),以确保在后台生成的值不会意外地导致UI从非调度器线程更新

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new ViewModel(Observable.Interval(TimeSpan.FromSeconds(1)));
    }
}

public class ViewModel : ReactiveObject
{
    private readonly ObservableAsPropertyHelper<long> _propertyHelper;
    public ViewModel(IObservable<long> factory)
    {
        factory.ObserveOn(RxApp.MainThreadScheduler).ToProperty(this, model => model.Property, out _propertyHelper);
    }
    public long Property => _propertyHelper.Value;
}

好吧,我发现了问题所在。唯一到达的"单元"项目是在进行ToProperty调用之前完成的,因此currentDetectionExposer的基础订阅是在项目到达之后完成的,并且从未发生更新。

我的观察依赖于两个来源,这两个来源是ISubject。我通过让他们两个都成为ReplaySubject来解决这个问题,所以每次订阅时都会推送他们的值,但不起作用!

相关内容

  • 没有找到相关文章

最新更新