/// <inheritdoc /> protected override void InitCommands() { AddJobCommand = new RelayCommand( () => { MessengerInstance.Send(new AddJobWindowOpenMessage()); }); RemoveJobCommand = new RelayCommand <Window>( window => { if (window == null) { window = MessageListener.GetWindow(typeof(MainWindow)); } if (MessageBox.Show(window, "Do you want to delete the job?", "Delete job", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { JobDefinitions.Remove(CurrentSelectedJobDefinition); CurrentSelectedJobDefinition = null; if (JobDefinitionsView.Count > 0) { JobDefinitionsView.MoveCurrentToFirst(); } } }, window => CurrentSelectedJobDefinition != null); ClosingCommand = new RelayCommand( () => { while (JobDefinitions.Any(j => j.CurrentJob != null && j.CurrentJob.State == JobStateEnum.Stopping)) { Task.Delay(100).Wait(); } JobDefinitions.Where(j => j.CurrentJob != null && !j.CurrentJob.Finished.HasValue).ToList().ForEach( j => { j.CurrentJob.Stop(); }); SaveCommand.Execute(null); }); LoadedCommand = new RelayCommand(ReloadOptions); SaveCommand = new RelayCommand( () => { Options.JobDefinitions = JobDefinitions.ToList(); var fileContent = JsonConvert.SerializeObject(Options); try { File.WriteAllText(_optionsFilePath, fileContent); } catch (Exception ex) { // TODO Trace.TraceError(ex.Message); } }); StartStopJobCommand = new RelayCommand <JobModel>( jobDef => { if (jobDef == null) { // don't know if this can happen return; } if (jobDef.IsBusy) { jobDef.CurrentJob.Stop(); return; } CurrentSelectedPingJob = jobDef.StartNew(); }, job => CurrentSelectedJobDefinition != null); CleanJobHistoryCommand = new RelayCommand <JobModel>( jobDef => { if (jobDef == null) { // don't know if this can happen return; } jobDef.Jobs.Clear(); JobDefinitionsView.Refresh(); }, job => CurrentSelectedJobDefinition != null && !CurrentSelectedJobDefinition.IsBusy && CurrentSelectedJobDefinition.Jobs.Any()); }