summaryrefslogtreecommitdiff
path: root/src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs')
-rw-r--r--src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs b/src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs
new file mode 100644
index 0000000..2e59e0d
--- /dev/null
+++ b/src/MVPtoMVVM.mvvm/viewmodels/MainWindowViewModel.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Windows.Input;
+using MVPtoMVVM.domain;
+using MVPtoMVVM.repositories;
+
+namespace MVPtoMVVM.mvvm.viewmodels
+{
+ public class MainWindowViewModel : INotifyPropertyChanged
+ {
+ private ITodoItemRepository todoItemRepository;
+ private Synchronizer<MainWindowViewModel> updater;
+
+ public MainWindowViewModel(ITodoItemRepository todoItemRepository)
+ {
+ this.todoItemRepository = todoItemRepository;
+ AddNewItemCommand = new SimpleCommand(AddNewItem);
+ CancelChangesCommand = new SimpleCommand(RefreshChanges);
+ updater = new Synchronizer<MainWindowViewModel>(this.PropertyChanged);
+ TodoItems = new ObservableCollection<TodoItemViewModel>();
+ RefreshChanges();
+ }
+
+ private void RefreshChanges()
+ {
+ TodoItems.Clear();
+ foreach (var item in todoItemRepository.GetAll().Select(MapFrom))
+ {
+ TodoItems.Add(item);
+ }
+
+ updater.Update(x => x.TodoItems);
+ }
+
+ private void AddNewItem()
+ {
+ TodoItems.Add(new TodoItemViewModel(todoItemRepository){Parent = this});
+ updater.Update(x => x.TodoItems);
+ }
+
+ private TodoItemViewModel MapFrom(TodoItem x)
+ {
+ return new TodoItemViewModel(todoItemRepository)
+ {
+ Id = x.Id,
+ Description = x.Description,
+ DueDate = x.DueDate,
+ Parent = this,
+ };
+ }
+
+ public ICollection<TodoItemViewModel> TodoItems { get; set; }
+ public event PropertyChangedEventHandler PropertyChanged = (o,e)=> { };
+ public ICommand CancelChangesCommand { get; set; }
+ public ICommand AddNewItemCommand { get; set; }
+
+ public void Update(Expression<Func<MainWindowViewModel, object>> property)
+ {
+ updater.Update(property);
+ }
+ }
+} \ No newline at end of file