public VoltmeterViewModel(IDeviceManager deviceManager, ITimer timer = null)
        {
            Contract.Requires<ArgumentNullException>(deviceManager != null);
            Bindings = new BindingManager();
            Voltmeter = new Model.Voltmeter(deviceManager, new CurrentContextTaskQueue());
            DeviceMonitor = new DeviceMonitor(deviceManager, DeviceConstants.SearchPattern);
            StopWatch = new Stopwatch();
            Timer = timer ?? new UiTimer
            {
                AutoReset = true,
                Interval = TimeSpan.FromMilliseconds(50),
            };
            Timer.Tick += (s, e) => { if (IsRunning) this.Notify(PropertyChanged, me => me.SessionDuration); };
            AvailableDevices.ListChanged += (s, e) => AutoSelectDevice(forceDeviceChange: false);

            AddDisplayValues();
            AddBindings();
            AutoSelectDevice(forceDeviceChange: true);
        }
        public VoltmeterViewModel(IDeviceManager deviceManager, ITimer timer = null)
        {
            Contract.Requires <ArgumentNullException>(deviceManager != null);
            Bindings      = new BindingManager();
            Voltmeter     = new Model.Voltmeter(deviceManager, new CurrentContextTaskQueue());
            DeviceMonitor = new DeviceMonitor(deviceManager, DeviceConstants.SearchPattern);
            StopWatch     = new Stopwatch();
            Timer         = timer ?? new UiTimer
            {
                AutoReset = true,
                Interval  = TimeSpan.FromMilliseconds(50),
            };
            Timer.Tick += (s, e) => { if (IsRunning)
                                      {
                                          this.Notify(PropertyChanged, me => me.SessionDuration);
                                      }
            };
            AvailableDevices.ListChanged += (s, e) => AutoSelectDevice(forceDeviceChange: false);

            AddDisplayValues();
            AddBindings();
            AutoSelectDevice(forceDeviceChange: true);
        }