Clock/ViewModels/ClockViewModel.cs (29 lines of code) (raw):

namespace Clock.ViewModels { using System; using Models; // ReSharper disable once ClassNeverInstantiated.Global internal class ClockViewModel : ViewModel, IClockViewModel, IDisposable, IObserver<Tick> { private readonly IClock _clock; private readonly IDisposable _timerToken; public ClockViewModel( IClock clock, ITimer timer, IDispatcher dispatcher = null) :base(dispatcher) { _clock = clock ?? throw new ArgumentNullException(nameof(clock)); _timerToken = (timer ?? throw new ArgumentNullException(nameof(timer))).Subscribe(this); } public string Time => _clock.Now.ToString("T"); public string Date => _clock.Now.ToString("d"); void IObserver<Tick>.OnNext(Tick value) { OnPropertyChanged(nameof(Time)); OnPropertyChanged(nameof(Date)); } void IObserver<Tick>.OnError(Exception error) { } void IObserver<Tick>.OnCompleted() { } void IDisposable.Dispose() => _timerToken.Dispose(); } }