ObservableAsPropertyHelper不会触发任何通知

时间:2016-05-07 23:25:05

标签: c# .net system.reactive reactive-programming reactiveui

我有这个简单的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,但它没有更新。它总是空的,我不明白为什么。

我做错了什么?

编辑:

好的,我发现了什么问题。唯一的&#34;单位&#34;在ToProperty调用之前到达的项目已经完成了,因此currentDetectionExposer的基础订阅是在项目到达之后进行的,并且没有发生任何更新。

我的观察结果取决于2个ISubject来源。我解决了这两个问题,使它们都成为ReplaySubjects,因此每次订阅时都会推送它们的值,而不是它的工作原理!

2 个答案:

答案 0 :(得分:1)

以下对我来说很好 - 你确定你的识别行为可以产生价值吗?

另外两个注意事项:标识.Subscribe()不是必需的 - ToProperty在内部进行订阅会导致您的observable在感冒时开始生成值。此外,您通常希望在ToProperty(..)之前放置一个ObserveOn(RxApp.MainThreadScheduler),以确保在背景上生成的值不会意外地导致从非调度程序线程更新UI < / p>

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

答案 1 :(得分:0)

好的,我发现了什么问题。唯一的&#34;单位&#34;在ToProperty调用之前到达的项目已经完成了,因此currentDetectionExposer的基础订阅是在项目到达之后进行的,并且没有发生任何更新。

我的观察结果取决于2个ISubject来源。我解决了这两个问题,使它们都成为ReplaySubjects,因此每次订阅时都会推送它们的值,而不是它的工作原理!