Commit 50b064f

Jason Lepp <jlepp@arcresources.com>
2010-10-15 21:21:13
Hooked up the new button
1 parent 6a2b2f2
src/MVPtoMVVM/mappers/ITodoItemPresenterMapper.cs
@@ -7,6 +7,7 @@ namespace MVPtoMVVM.mappers
 {
     public interface ITodoItemPresenterMapper
     {
+        ITodoItemPresenter MapFrom(TodoItem item);
         IEnumerable<ITodoItemPresenter> MapAll(IEnumerable<TodoItem> items);
     }
 }
\ No newline at end of file
src/MVPtoMVVM/mappers/TodoItemPresenterMapper.cs
@@ -8,7 +8,7 @@ namespace MVPtoMVVM.mappers
 {
     public class TodoItemPresenterMapper : ITodoItemPresenterMapper
     {
-        private ITodoItemPresenter MapFrom(TodoItem item)
+        public ITodoItemPresenter MapFrom(TodoItem item)
         {
             var presenter = ObjectFactory.GetInstance<ITodoItemPresenter>();
             presenter.Id = item.Id;
src/MVPtoMVVM/presenters/IMvpPresenter.cs
@@ -5,5 +5,7 @@ namespace MVPtoMVVM.presenters
     public interface IMvpPresenter
     {
         void SetView(IMvpView view);
+        void AddNewItem();
+        void CancelAllChanges();
     }
 }
\ No newline at end of file
src/MVPtoMVVM/presenters/MvpPresenter.cs
@@ -1,5 +1,7 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
+using MVPtoMVVM.domain;
 using MVPtoMVVM.mappers;
 using MVPtoMVVM.repositories;
 using MVPtoMVVM.views;
@@ -24,7 +26,25 @@ namespace MVPtoMVVM.presenters
             InitializeView();
         }
 
+        public void AddNewItem()
+        {
+            var items = new List<ITodoItemPresenter>(view.GetTodoItems());
+            var newItem = presenterMapper.MapFrom(new TodoItem { DueDate = DateTime.Today});
+            items.Add(newItem);
+            view.SetTodoItems(items);
+        }
+
+        public void CancelAllChanges()
+        {
+            RefreshItems();
+        }
+
         private void InitializeView()
+        {
+            RefreshItems();
+        }
+
+        private void RefreshItems()
         {
             view.SetTodoItems(presenterMapper.MapAll(itemRepository.GetAll()));
         }
src/MVPtoMVVM/repositories/TodoItemRepository.cs
@@ -7,13 +7,13 @@ namespace MVPtoMVVM.repositories
 {
     public class TodoItemRepository : ITodoItemRepository
     {
-        private List<TodoItem> items;
+        private static readonly List<TodoItem> items = new List<TodoItem>();
         private int totalItems = 0;
 
         public TodoItemRepository()
         {
-            items = new List<TodoItem>();
-            Save(new TodoItem {Description = "First One", DueDate = DateTime.Today});
+            if (!items.Any())
+                Save(new TodoItem {Description = "First One", DueDate = DateTime.Today});
         }
 
         public void Save(TodoItem item)
src/MVPtoMVVM/views/IMvpView.cs
@@ -6,5 +6,6 @@ namespace MVPtoMVVM.views
     public interface IMvpView
     {
         void SetTodoItems(IEnumerable<ITodoItemPresenter> presenters);
+        IEnumerable<ITodoItemPresenter> GetTodoItems();
     }
 }
\ No newline at end of file
src/MVPtoMVVM/views/ITodoItemView.cs
@@ -1,4 +1,5 @@
 using System;
+using MVPtoMVVM.presenters;
 
 namespace MVPtoMVVM.views
 {
@@ -7,5 +8,6 @@ namespace MVPtoMVVM.views
         string Description { get; set; }
         DateTime DueDate { get; set; }
         bool SaveButtonEnabled { get; set; }
+        ITodoItemPresenter Presenter { get; }
     }
 }
\ No newline at end of file
src/MVPtoMVVM.mvp/MvpWindow.xaml
@@ -2,7 +2,11 @@
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         Title="MainWindow" Height="350" Width="525">
-    <StackPanel>
-        <ListView Name="todoItemsList"></ListView>
-    </StackPanel>
+    <DockPanel LastChildFill="False">
+        <ListView Name="todoItemsList" DockPanel.Dock="Top" />
+        <DockPanel DockPanel.Dock="Bottom" LastChildFill="False">
+            <Button Content="Cancel Changes" Name="cancelButton" DockPanel.Dock="Right"/>
+            <Button Content="Add New Item" Name="newItemButton" DockPanel.Dock="Right"/>
+        </DockPanel>
+    </DockPanel>
 </Window>
src/MVPtoMVVM.mvp/MvpWindow.xaml.cs
@@ -15,7 +15,8 @@ namespace MVPtoMVVM.mvp
             InitializeComponent();
             presenter = ObjectFactory.GetInstance<IMvpPresenter>();
             presenter.SetView(this);
-            
+            newItemButton.Click += (o, e) => presenter.AddNewItem();
+            cancelButton.Click += (o, e) => presenter.CancelAllChanges();
         }
 
         public void SetTodoItems(IEnumerable<ITodoItemPresenter> presenters)
@@ -23,5 +24,10 @@ namespace MVPtoMVVM.mvp
             todoItemsList.ItemsSource = presenters.Select(x => new TodoItemView(x));
         }
 
+        public IEnumerable<ITodoItemPresenter> GetTodoItems()
+        {
+            return todoItemsList.ItemsSource.Cast<ITodoItemView>().Select(x => x.Presenter);
+        }
+
     }
 }
src/MVPtoMVVM.mvp/TodoItemView.xaml.cs
@@ -11,6 +11,7 @@ namespace MVPtoMVVM.mvp
     {
         public TodoItemView(ITodoItemPresenter presenter)
         {
+            Presenter = presenter;
             InitializeComponent();
             presenter.SetView(this);
             saveButton.Click += (o, e) => presenter.SaveItem();
@@ -37,5 +38,6 @@ namespace MVPtoMVVM.mvp
             set { saveButton.IsEnabled = value; }
         }
 
+        public ITodoItemPresenter Presenter { get; private set; }
     }
 }