Bladeren bron

Реализована отмена данных

Вадим Королёв 1 jaar geleden
bovenliggende
commit
830a8b2970
2 gewijzigde bestanden met toevoegingen van 57 en 29 verwijderingen
  1. 56 28
      InvestTracker/VM/EmployeeBrowseVM.cs
  2. 1 1
      InvestTracker/Views/EmployeeBrowseView.xaml

+ 56 - 28
InvestTracker/VM/EmployeeBrowseVM.cs

@@ -55,18 +55,18 @@ namespace InvestTracker.VM
 
         public EmployeeBrowseVM()
         {
-            UndoCommand = new DelegateCommand(Undo_Executed, WhenDirty);
-            SaveCommand = new DelegateCommand(Save_Executed, WhenDirty);
-            NewCommand = new DelegateCommand(New_Executed, WhenClean);
-            EditCommand = new DelegateCommand(Edit_Executed, WhenClean);
-            DeleteCommand = new DelegateCommand(Delete_Executed, WhenClean);
-            FindCommand = new DelegateCommand(Find_Executed, WhenClean);
-
-            GridBlocked = true;
-
-            _dbContext = new InvestContext();
-            Employees = new ObservableCollection<Employee>(_dbContext.Employees.ToList());
-            AllTitles = new ObservableCollection<Title>(_dbContext.Titles.ToList());
+            UndoCommand     = new DelegateCommand(Undo_Executed,    WhenDirty);
+            SaveCommand     = new DelegateCommand(Save_Executed,    WhenDirty);
+            NewCommand      = new DelegateCommand(New_Executed,     WhenClean);
+            EditCommand     = new DelegateCommand(Edit_Executed,    WhenClean);
+            DeleteCommand   = new DelegateCommand(Delete_Executed,  WhenClean);
+            FindCommand     = new DelegateCommand(Find_Executed,    WhenClean);
+
+            GridBlocked     = true;
+
+            _dbContext      = new InvestContext();
+            Employees       = new ObservableCollection<Employee>(_dbContext.Employees.ToList());
+            AllTitles       = new ObservableCollection<Title>(_dbContext.Titles.ToList());
         }
 
         /// <summary>
@@ -74,8 +74,34 @@ namespace InvestTracker.VM
         /// </summary>
         private void Undo_Executed()
         {
-            MessageBox.Show("Undoing");
-            isDirty = true;
+            // http://stackoverflow.com/questions/5466677/ddg#17967959
+            var changedEntries = _dbContext.ChangeTracker.Entries()
+                .Where(x => x.State != EntityState.Unchanged)
+                .ToList();
+
+            foreach (var entry in changedEntries)
+            {
+                switch (entry.State)
+                {
+                    case EntityState.Modified:
+                        entry.CurrentValues.SetValues(entry.OriginalValues);
+                        entry.State = EntityState.Unchanged;
+                        break;
+                    case EntityState.Added:
+                        entry.State = EntityState.Detached;
+                        break;
+                    case EntityState.Deleted:
+                        entry.State = EntityState.Unchanged;
+                        break;
+                }
+            }
+
+            Employees = new ObservableCollection<Employee>(_dbContext.Employees.ToList());
+
+            GridBlocked = true;
+            isDirty = false;
+            RaisePropertyChanged(nameof(GridBlocked));
+            RaisePropertyChanged(nameof(Employees));
             ReEvaluateCommands();
         }
 
@@ -95,6 +121,7 @@ namespace InvestTracker.VM
                     message += "\r\n" + ex.InnerException.Message;
                 }
                 MessageBox.Show(message);
+                return;
             }
             
             GridBlocked = true;
@@ -137,23 +164,24 @@ namespace InvestTracker.VM
         /// </summary>
         private void Delete_Executed()
         {
-            if (SelectedEmployee != null)
+            if (SelectedEmployee == null)
             {
-                MessageBoxResult result = MessageBox.Show(
-                    $"Удалить сотрудника: {SelectedEmployee.Surname} {SelectedEmployee.Name} {SelectedEmployee.Patronymic}",
-                    "Предупреждение",
-                    MessageBoxButton.OKCancel);
+                MessageBox.Show("Не выбрана строка для удаления");
+                return;
+            }
+            
+            MessageBoxResult result = MessageBox.Show(
+                $"Удалить сотрудника: {SelectedEmployee.Surname} {SelectedEmployee.Name} {SelectedEmployee.Patronymic}",
+                "Предупреждение",
+                MessageBoxButton.OKCancel);
 
-                if (result == MessageBoxResult.OK)
-                {
-                    _dbContext.Employees.Remove(SelectedEmployee);
-                    _dbContext.SaveChanges();
-                    Employees.Remove(SelectedEmployee);
-                } else
-                {
-                    MessageBox.Show("Не выбрана строка для удаления");
-                }
+            if (result != MessageBoxResult.OK)
+            {
+                return;
             }
+            
+            _dbContext.Employees.Remove(SelectedEmployee);
+            Employees.Remove(SelectedEmployee);
             isDirty = true;
             RaisePropertyChanged(nameof(isDirty));
             RaisePropertyChanged(nameof(SelectedEmployee));

+ 1 - 1
InvestTracker/Views/EmployeeBrowseView.xaml

@@ -60,7 +60,7 @@
                 <Image Width="16" Height="16"  Source="/Images/save.png" />
             </Button>
             <Button Name="Delete" Command="{Binding DeleteCommand}" ToolTip="Удалить">
-                <Image Width="16" Height="16"  Source="/Images/undo.png" />
+                <Image Width="16" Height="16"  Source="/Images/delete.png" />
             </Button>
         </ToolBar>