2016-05-07 2 views
0

У меня есть эта простая ViewModel.ObservableAsPropertyHelper не сбрасывает уведомления

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, но она не обновляется. Это всегда null, и я не понимаю, почему.

Что я делаю неправильно?

EDIT:

ОК, я обнаружил, что была проблема. Единственный элемент «единицы», который прибывал, сделал это до того, как был вызван вызов ToProperty, поэтому базовая подписка currentDetectionExposer была сделана ПОСЛЕ отправленного товара и обновления не было.

Мое наблюдение зависит от 2 источников, которые являются ISubject. Я решаю его создание обоих из них ReplaySubjects, поэтому их значения выталкиваются каждый раз, когда подписка выполняется, а не работает!

ответ

1

Следующие работы отлично подходят для меня - уверены ли вы, что ваши идентификационные данные всегда дают ценность?

Пара дополнительных примечаний: идентификация. Подписываться() не требуется. ToProperty делает внутреннюю подписку, которая заставляет ваше наблюдаемое начинать производить значения, если холодно. Кроме того, вы обычно захотите поместить ObserveOn (RxApp.MainThreadScheduler) перед ToProperty (..), чтобы убедиться, что значения, созданные на фоне, не случайно приводят к обновлению пользовательского интерфейса из недисперсной нити

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

ОК, я обнаружил, в чем проблема. Единственный элемент «единицы», который прибывал, сделал это до того, как был вызван вызов ToProperty, поэтому базовая подписка currentDetectionExposer была сделана ПОСЛЕ отправленного товара и обновления не было.

Мое наблюдение зависит от 2 источников, которые являются ISubject. Я решаю его создание обоих из них ReplaySubjects, поэтому их значения выталкиваются каждый раз, когда подписка выполняется, а не работает!

Смежные вопросы