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