Пример #1
0
 private void SetValue(T value)
 {
     LatestValue = value;
     ValidationTrigger.OnNext(value);
     Source.OnNext(value);
     RaiseEventScheduler.Schedule(() => PropertyChanged?.Invoke(this, SingletonPropertyChangedEventArgs.Value));
 }
Пример #2
0
 private void SetValue(T value)
 {
     LatestValue = value;
     if (!IsDisposed)
     {
         ValidationTrigger.OnNext(value);
         OnNextAndRaiseValueChanged(ref value);
     }
 }
        internal ReactiveProperty(
            IObservable <T> source,
            IScheduler raiseEventScheduler,
            T initialValue            = default(T),
            ReactivePropertyMode mode = ReactivePropertyMode.DistinctUntilChanged | ReactivePropertyMode.RaiseLatestValueOnSubscribe)
        {
            this.LatestValue         = initialValue;
            this.RaiseEventScheduler = raiseEventScheduler;

            // create source
            var merge = source.Merge(AnotherTrigger);

            if (mode.HasFlag(ReactivePropertyMode.DistinctUntilChanged))
            {
                merge = merge.DistinctUntilChanged();
            }
            merge = merge.Do(x =>
            {
                // setvalue immediately
                if (!IsValueChanged)
                {
                    IsValueChanged = true;
                }
                LatestValue = x;
            });

            // publish observable
            var connectable = (mode.HasFlag(ReactivePropertyMode.RaiseLatestValueOnSubscribe))
                ? merge.Publish(initialValue)
                : merge.Publish();

            this.Source = connectable.AsObservable();

            this.ValidationTrigger = mode.HasFlag(ReactivePropertyMode.RaiseLatestValueOnSubscribe)
                ? (ISubject <T>) new BehaviorSubject <T>(initialValue)
                : (ISubject <T>) new Subject <T>();
            connectable.Subscribe(x => ValidationTrigger.OnNext(x));

            // raise notification
            this.RaiseSubscription = connectable
                                     .ObserveOn(raiseEventScheduler)
                                     .Subscribe(x => this.PropertyChanged?.Invoke(this, SingletonPropertyChangedEventArgs.Value));

            // start source
            this.SourceDisposable = connectable.Connect();
            this.ErrorsTrigger    = new BehaviorSubject <IEnumerable>(this.GetErrors(null));
        }
Пример #4
0
 /// <summary>
 /// Invoke validation process.
 /// </summary>
 public void ForceValidate() => ValidationTrigger.OnNext(LatestValue);