Exemple #1
0
        public BoilTimerViewModel(IScreen hostScreen)
        {
            HostScreen = hostScreen;

            StartTimer = ReactiveCommand.Create();
            StartTimer.Subscribe();

            PauseTimer = ReactiveCommand.Create();
            PauseTimer.Subscribe();

            ResetTimer = ReactiveCommand.Create();
            ResetTimer.Subscribe();
        }
        public MashTimerViewModel(IScreen hostScreen, BrewData data)
        {
            HostScreen = hostScreen ?? Locator.Current.GetService <IScreen> ();

            CurrentTimeRemaining = (int)data.MashTime.TotalSeconds;

            var canStartOrReset = this.WhenAnyValue(x => x.IsTimerRunning).Where(x => !x);

            StartTimer = ReactiveCommand.Create(canStartOrReset);
            var start = StartTimer.Select(x => true);

            PauseTimer = ReactiveCommand.Create(this.WhenAnyValue(x => x.IsTimerRunning).Where(x => x));
            var pause = PauseTimer.Select(x => false);

            Observable.Merge(start, pause)
            .StartWith(false)
            .ToProperty(this, vm => vm.IsTimerRunning, out _IsTimerRunning);

            ResetTimer = ReactiveCommand.Create(canStartOrReset);
            ResetTimer.Subscribe(_ => {
                CurrentTimeRemaining = (int)data.MashTime.TotalSeconds;
            });


            this.WhenAnyValue(x => x.IsTimerRunning)
            .Where(x => x == true)
            .Subscribe(_ => Device.StartTimer(TimeSpan.FromSeconds(1), () => {
                if (CurrentTimeRemaining > 0)
                {
                    CurrentTimeRemaining -= 1;
                }
                return(IsTimerRunning);
            }));



            this.WhenAnyValue(x => x.CurrentTimeRemaining)
            .Select(x => TimeSpan.FromSeconds(x).ToString())
            .ToProperty(this, vm => vm.ClockText, out _ClockText);
        }
 /// <summary>
 ///     Raise the pause timer event.
 /// </summary>
 private static void RaisePauseTimer()
 {
     PauseTimer?.Invoke(null, EventArgs.Empty);
 }