Inheritance: OverlayViewModelBase, ISingleton
        public SoftwareUpdateSquirrelOverlayViewModel(SettingsViewModel settingsViewModel, IRestarter restarter)
            : base(settingsViewModel) {
            _restarter = restarter;
            ChangelogUrl = new Uri(CommonUrls.MainUrl, "/changelog/nolayout");

            var observable = this.WhenAnyValue(x => x.IsCheckingForUpdates, x => x.IsApplyingUpdate, (x, y) => !x && !y);

            ReactiveCommand.CreateAsyncTask(observable, x => ApplyUpdate())
                .SetNewCommand(this, x => x.ApplyUpdateCommand);

            ReactiveCommand.CreateAsyncTask(observable, x => SeeIfThereAreUpdates())
                .SetNewCommand(this, x => x.CheckForUpdatesCommand)
                .ObserveOn(RxApp.MainThreadScheduler)
                .Subscribe(RefreshInfo);

            ApplyUpdateCommand.IsExecuting.BindTo(this, x => x.IsApplyingUpdate);
            CheckForUpdatesCommand.IsExecuting.BindTo(this, x => x.IsCheckingForUpdates);

            ReactiveCommand.CreateAsyncTask(x => Restart())
                .SetNewCommand(this, x => x.RestartCommand);

            this.WhenAnyValue(x => x.IsActive)
                .Where(x => x)
                .Subscribe(x => CheckForUpdatesAtStart());
        }
        public SoftwareUpdateOverlayViewModel(SettingsViewModel settingsViewModel, ISoftwareUpdate softwareUpdate)
            : base(settingsViewModel) {
            SoftwareUpdate = softwareUpdate;

            this.WhenAnyValue(x => x.IsActive)
                .Where(x => x)
                .Subscribe(x => CheckForUpdates());
        }
        public OptionsMenuViewModel(IPlayShellViewModel playShellViewModel) {
            _shellViewModel = playShellViewModel;
            _softwareUpdate = _shellViewModel.SoftwareUpdate;
            _factory = _shellViewModel.Factory;
            _settings = _shellViewModel.Settings;

            OptionsMenu = new OptionsMenu(this);

            this.SetCommand(x => x.OptionsMenuCommand).Subscribe(x => OptionsMenu.IsOpen = !OptionsMenu.IsOpen);
        }
        protected SoftwareUpdateOverlayViewModelBase(SettingsViewModel settingsViewModel) {
            DisplayName = "Check for Updates";

            SettingsVM = settingsViewModel;
        }