public Main() { errorScroller = new ErrorScroller(); errorScroller.RaiseErrorChanged += () => RaisePropertyChanged(nameof(CurrentError)); // Работа с SQL currentTasks = new CurrentTasks(errorScroller); checkForNewTasks = new AsutpServer(errorScroller); TaskList = new ObservableCollection <ProductionTask>(currentTasks.TaskList); ((INotifyCollectionChanged)currentTasks.TaskList).CollectionChanged += (s, a) => { if (a.NewItems?.Count >= 1) { Application.Current.Dispatcher.BeginInvoke(new Action(() => { foreach (ProductionTask task in a.NewItems) { TaskList.Add(task); } })); } if (a.OldItems?.Count >= 1) { Application.Current.Dispatcher.BeginInvoke(new Action(() => { foreach (ProductionTask task in a.OldItems) { TaskList.Remove(task); } })); } }; FinishedTaskList = new ObservableCollection <ProductionTask>(currentTasks.FinishedTaskList); ((INotifyCollectionChanged)currentTasks.FinishedTaskList).CollectionChanged += (s, a) => { if (a.NewItems?.Count >= 1) { Application.Current.Dispatcher.BeginInvoke(new Action(() => { foreach (ProductionTask task in a.NewItems) { FinishedTaskList.Add(task); } })); } if (a.OldItems?.Count >= 1) { Application.Current.Dispatcher.BeginInvoke(new Action(() => { foreach (ProductionTask task in a.OldItems) { FinishedTaskList.Remove(task); } })); } }; //Работа с ПЛК plc = new Plc(); OpenNewTaskWindow = new DelegateCommand(() => { NewTaskWindow newTaskWindow = new NewTaskWindow(new NewTask(currentTasks)); newTaskWindow.ShowDialog(); }); StartTask = new DelegateCommand(() => { try { plc.SendTask(new ProductionTaskExtended(SelectedTask)); currentTasks.UpdateStartDate(SelectedTask.ID); } catch (Exception e) { Log.logThis(e.Message); MessageBox.Show("Нет подключения к ПЛК"); } //RaisePropertyChanged(nameof(SelectedTask)); }); FinishTask = new DelegateCommand(() => { try { ProductionTask taskResult = plc.GetCurrentTaskResult(); taskResult.FinishDate = DateTime.Now; try { currentTasks.LoadTaskResult(taskResult); } catch (TaskNotCreatedException) { MessageBox.Show("Задание не найдено. Введите параметры"); NewTaskWindow newTaskWindow = new NewTaskWindow(new NewTask(currentTasks, taskResult)); newTaskWindow.ShowDialog(); } } catch (Exception e) { MessageBox.Show(e.Message); } }); ShowCurrentTask = new DelegateCommand(() => { VisibleCurrentTask = true; VisibleFinishedTask = false; }); ShowFinishedTask = new DelegateCommand(() => { VisibleCurrentTask = false; VisibleFinishedTask = true; }); }