//Вырезает запись типа "Работа" и ее "дела" во внутренний клипборд public void CutJobRecords(List <ViewRecord> SelectedViewRecords) { Int32[] number; Int32 index; Record r; clipboard.Clear(); ViewRecord vr = SelectedViewRecords[0]; number = GetNumbers(vr.Number); foreach (Record rec in modelRecords) { if (rec.ProjNumber == number[0] && rec.JobNumber == number[1]) { index = IndexOfNumber(number[0], number[1], number[2]); r = rec.Clone(); Record undoRecord = rec.Clone(); UndoAction undoAction = new UndoAction(ActionType.delRecord, undoRecord); undoActions.Push(undoAction); clipboard.Enqueue(r); } } foreach (Record rc in clipboard) { modelRecords.Remove(rc); } NumerationRepair(); }
/// <summary> /// Изменение полей в существующей записи Record /// </summary> /// <param name="viewRecord">ViewRecord передается из ViewModel</param> public void UpdateModelRecord(ViewRecord viewRecord) { Int32 index; Record updatedRecord; //Поиск строки по номеру Проект/Работа/Дело String[] number = viewRecord.Number.Split(new char[] { '.' }); Int32 proj = Int32.Parse(number[0]); Int32 job = Int32.Parse(number[1]); Int32 act = Int32.Parse(number[2]); index = IndexOfNumber(proj, job, act); if (index < 0) { MessageBox.Show("Не найдена строка для обновления в modelRecords"); return; } updatedRecord = modelRecords[index]; Record undoRecord = updatedRecord.Clone(); UndoAction undoAction = new UndoAction(ActionType.editRecord, undoRecord); undoActions.Push(undoAction); redoActions.Clear(); updatedRecord.RecordDate = viewRecord.RecordDate; updatedRecord.Content = viewRecord.Content; updatedRecord.AlarmTime = viewRecord.AlarmTime; updatedRecord.Note = viewRecord.Note; //MessageBox.Show("Model Updated"); }
private Queue <Record> clipboard; //Стэк для хранения скопированных или вырезаных записей public Model() { modelRecords = new List <Record>(); //Модель //viewRecords = new SpecialObservableCollection<ViewRecord>(); //Выборка из модели для отображения undoActions = new Stack <UndoAction>(); //Список действий для команды Undo redoActions = new Stack <UndoAction>(); //Список действий для отмены Undo lastRowAdded = new ViewRecord(); clipboard = new Queue <Record>(); }
//Вставляет записи из внутреннего клипборда public void PasteRecords(List <ViewRecord> SelectedViewRecords) { if (clipboard.Count == 0) { return; } Int32[] number; Int32 index; Boolean lastRecordFlag = true; ViewRecord vr = SelectedViewRecords[0]; number = GetNumbers(vr.Number); index = IndexOfNumber(number[0], number[1], number[2]); RecordType type = clipboard.Peek().RecordType; if (type == RecordType.act) //Вставляем группу записей Act { foreach (Record r in clipboard) { Record undoRecord = r.Clone(); UndoAction undoAction = new UndoAction(ActionType.addRecord, undoRecord); undoActions.Push(undoAction); modelRecords.Insert(++index, r); } } else //Вставляем Работу и ее Дела { for (Int32 i = ++index; i < modelRecords.Count(); i++) //Ищем следующую запись типа Проект или Работа { if (modelRecords[i].RecordType == RecordType.job || modelRecords[i].RecordType == RecordType.project) { index = i - 1; lastRecordFlag = false; break; } } if (lastRecordFlag) //Если дошли до конца modelRecords { index = modelRecords.Count() - 1; } foreach (Record r in clipboard) { Record undoRecord = r.Clone(); UndoAction undoAction = new UndoAction(ActionType.addRecord, undoRecord); undoActions.Push(undoAction); modelRecords.Insert(++index, r); } } NumerationRepair(); }
//Этот метод срабатывает при редактировании ячеек (до принятия изменений) //Определяет измененную ячейку GataGrid и передает ее адрес и содержимое во ViewModel private void MainDataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { if (e.EditAction == DataGridEditAction.Commit) { DataGridRow row = e.Row; ViewRecord vr = (ViewRecord)row.Item; //Int32 columnIndex = e.Column.DisplayIndex; //Номер ячейки в строке DataGridCell dataGridCell = (DataGridCell)e.EditingElement.Parent; TextBox textBox = (TextBox)dataGridCell.Content; String content = textBox.Text; String columnName = e.Column.SortMemberPath; viewModel.DataGridChanged(vr, columnName, content); } }