public OptionsViewModel(IVisibilitySettings settings) { var control = new ServiceControl(); var items = control.Services.Select(item => new ServiceSelectionItem(settings) { DisplayName = item.DisplayName, ServiceName = item.ServiceName }); Services = new ObservableCollection <ServiceSelectionItem>(items); }
public MainViewModel(IVisibilitySettings settings) { _settings = settings; _quitCommand = new ActionCommand(() => { var evt = QuitEvent; if (evt != null) { evt(); } }); Services = new ObservableCollection <ServiceItem>(); FilteredServices = new ObservableCollection <ServiceItem>(); OptionsCommand = new ActionCommand(() => { if (_options == null || _options.IsClosed) { _options = new Options(new OptionsViewModel(_settings)); } if (!_options.IsVisible) { _options.Show(); } else { _options.BringIntoView(); } }); ThreadPool.QueueUserWorkItem(cb => { var services = ServiceController.GetServices(); // Force creation of items with ToArray() var items = services.Select( service => new ServiceItem(service, settings)).ToArray(); App.Current.Dispatcher.BeginInvoke(new Action(() => { foreach (var item in items) { Services.Add(item); if (item.Visibility) { FilteredServices.Add(item); } } ServicesPopulated = true; })); }); }
// Avoid calling on UI thread. public ServiceItem(ServiceController service, IVisibilitySettings settings) { _settings = settings; Service = service; DisplayName = service.DisplayName; ServiceName = service.ServiceName; Status = service.Status.ToString(); AttachName = "Attach";// TODO: attached or not, TODO part of the command? var process = ServiceControl.ServiceToProcess(Service); AttachCommand = new ActionCommand(() => { }, Service.Status == ServiceControllerStatus.Running && VsEnvironment.Debuggers.Any()); var debugger = VsEnvironment.Debuggers.FirstOrDefault(p => p.IsAttachedTo(process.Id)); DetachCommand = new ActionCommand(() => { Detach(debugger); }, Service.Status == ServiceControllerStatus.Running && VsEnvironment.Debuggers.Any()); StartName = Service.Status == ServiceControllerStatus.Running ? "Stop" : "Start"; // TODO: intermediate states StartServiceCommand = new ActionCommand(Start); StopServiceCommand = new ActionCommand(Stop); SetPid(); if (Service.Status == ServiceControllerStatus.Running) { StartVisibility = System.Windows.Visibility.Collapsed; StopVisibility = System.Windows.Visibility.Visible; AttachVisibility = (debugger == null) ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed; DetachVisibility = (debugger == null) ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible; } else { StartVisibility = System.Windows.Visibility.Visible; StopVisibility = System.Windows.Visibility.Collapsed; AttachVisibility = System.Windows.Visibility.Visible; DetachVisibility = System.Windows.Visibility.Collapsed; } }
public ServiceSelectionItem(IVisibilitySettings settings) { _settings = settings; }