public SettingsViewModel(IUserSettings userSettings, IList <ISelectableViewPart> selectableViewParts , ISpotSet spotSet, IContext context, ISerialStream serialStream) { if (selectableViewParts == null) { throw new ArgumentNullException(nameof(selectableViewParts)); } this.Settings = userSettings ?? throw new ArgumentNullException(nameof(userSettings)); this.spotSet = spotSet ?? throw new ArgumentNullException(nameof(spotSet)); Context = context ?? throw new ArgumentNullException(nameof(context)); this.serialStream = serialStream ?? throw new ArgumentNullException(nameof(serialStream)); SelectableViewParts = selectableViewParts.OrderBy(p => p.Order) .ToList(); #if DEBUG SelectedViewPart = SelectableViewParts.Last(); #else SelectedViewPart = SelectableViewParts.First(); #endif PossibleLedCountsVertical = Enumerable.Range(10, 190).ToList(); PossibleLedCountsHorizontal = Enumerable.Range(10, 290).ToList(); PropertyChanged += (s, e) => { switch (e.PropertyName) { case nameof(SelectedViewPart): var name = SelectedViewPart?.ViewPartName ?? "nothing"; break; } }; Settings.PropertyChanged += (s, e) => { switch (e.PropertyName) { case nameof(Settings.SpotsX): RaisePropertyChanged(() => SpotsXMaximum); RaisePropertyChanged(() => LedCount); RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.SpotsY): RaisePropertyChanged(() => SpotsYMaximum); RaisePropertyChanged(() => LedCount); RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.UseLinearLighting): RaisePropertyChanged(() => UseNonLinearLighting); break; case nameof(Settings.OffsetLed): RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.Autostart): if (Settings.Autostart) { StartUpManager.AddApplicationToCurrentUserStartup(); } else { StartUpManager.RemoveApplicationFromCurrentUserStartup(); } break; case nameof(Settings.ComPort): RaisePropertyChanged(() => TransferCanBeStarted); RaisePropertyChanged(() => TransferCanNotBeStarted); break; } }; }
public SettingsViewModel(IUserSettings userSettings, IList <ISelectableViewPart> selectableViewParts , ISpotSet spotSet, IContext context, TelemetryClient tc, ISerialStream serialStream) { WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent"); watcher = new ManagementEventWatcher(query); watcher.EventArrived += (s, e) => RaisePropertyChanged(() => AvailableComPorts); // watcher.Query = query; watcher.Start(); // watcher.WaitForNextEvent(); if (selectableViewParts == null) { throw new ArgumentNullException(nameof(selectableViewParts)); } this.Settings = userSettings ?? throw new ArgumentNullException(nameof(userSettings)); this.spotSet = spotSet ?? throw new ArgumentNullException(nameof(spotSet)); Context = context ?? throw new ArgumentNullException(nameof(context)); this.serialStream = serialStream ?? throw new ArgumentNullException(nameof(serialStream)); SelectableViewParts = selectableViewParts.OrderBy(p => p.Order) .ToList(); #if DEBUG SelectedViewPart = SelectableViewParts.First(); #else SelectedViewPart = SelectableViewParts.First(); #endif PossibleLedCountsVertical = Enumerable.Range(10, 190).ToList(); PossibleLedCountsHorizontal = Enumerable.Range(10, 290).ToList(); PropertyChanged += (s, e) => { switch (e.PropertyName) { case nameof(SelectedViewPart): var name = SelectedViewPart?.ViewPartName ?? "nothing"; tc.TrackPageView(name); break; } }; Settings.PropertyChanged += (s, e) => { switch (e.PropertyName) { case nameof(Settings.SpotsX): RaisePropertyChanged(() => SpotsXMaximum); RaisePropertyChanged(() => LedCount); RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.SpotsY): RaisePropertyChanged(() => SpotsYMaximum); RaisePropertyChanged(() => LedCount); RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.LedsPerSpot): RaisePropertyChanged(() => LedCount); RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.UseLinearLighting): RaisePropertyChanged(() => UseNonLinearLighting); break; case nameof(Settings.OffsetLed): RaisePropertyChanged(() => OffsetLedMaximum); break; case nameof(Settings.Autostart): if (Settings.Autostart) { StartUpManager.AddApplicationToCurrentUserStartup(); } else { StartUpManager.RemoveApplicationFromCurrentUserStartup(); } break; case nameof(Settings.ComPort): RaisePropertyChanged(() => TransferCanBeStarted); RaisePropertyChanged(() => TransferCanNotBeStarted); break; } }; }