public EventToReactiveProperty3ViewModel()
        {
            // Throttleメソッドは指定した間、新たな値が発行されなかったら最後に発行された値を後続に流す
            var pushingSpanMsec = 300.0;

            /*
             *  一番最初に思い付いた実装。ダサい
             */
            MouseDownUnit
            .Throttle(TimeSpan.FromMilliseconds(pushingSpanMsec))
            .TakeUntil(MouseUpUnit)                             // ちょん押しを弾く
            .ObserveOnUIDispatcher()
            .Repeat()
            .Subscribe(_ => MouseLongPushing1.TurnOn())
            .AddTo(CompositeDisposable);

            MouseUpUnit
            .Where(_ => MouseLongPushing1.Value)                 // Push中のみ解除判定
            .Subscribe(_ => MouseLongPushing1.TurnOff())
            .AddTo(CompositeDisposable);

            /*
             *  Finally を使って、上の処理を一文に無理やりまとめた版。
             *  ReadOnlyReactiveProperty に出来ていないのが残念…
             */
            MouseLongPushing2 = MouseDownUnit
                                .Throttle(TimeSpan.FromMilliseconds(pushingSpanMsec))
                                .TakeUntil(MouseUpUnit)         // ちょん押しを弾く
                                .ObserveOnUIDispatcher()
                                .Finally(() => MouseLongPushing2.Value = false)
                                .Repeat()
                                .Select(_ => true)
                                .ToReactiveProperty()
                                .AddTo(CompositeDisposable);

            /*
             *  ◆ReadOnlyReactiveProperty を使って、一文にまとめられへんかなぁ…
             */
        }
예제 #2
0
        public EventToReactiveProperty1ViewModel()
        {
            PreviewMouseDownUnit
            .Select(_ => nameof(PreviewMouseDownUnit).Replace("Unit", ""))
            .Subscribe(x =>
            {
                MouseEventCounter.PreviewMouseDownCounter++;
                NotifyPropertyChanged(nameof(MouseEventCounter));
            })
            .AddTo(CompositeDisposable);

            MouseDownUnit
            .Select(_ => nameof(MouseDownUnit).Replace("Unit", ""))
            .Subscribe(x =>
            {
                MouseEventCounter.MouseDownCounter++;
                NotifyPropertyChanged(nameof(MouseEventCounter));
            })
            .AddTo(CompositeDisposable);

            MouseUpUnit
            .Select(_ => nameof(MouseUpUnit).Replace("Unit", ""))
            .Subscribe(x =>
            {
                MouseEventCounter.MouseUpCounter++;
                NotifyPropertyChanged(nameof(MouseEventCounter));
            })
            .AddTo(CompositeDisposable);

            PreviewMouseUpUnit
            .Select(_ => nameof(PreviewMouseUpUnit).Replace("Unit", ""))
            .Subscribe(x =>
            {
                MouseEventCounter.PreviewMouseUpCounter++;
                NotifyPropertyChanged(nameof(MouseEventCounter));
            })
            .AddTo(CompositeDisposable);
        }