Commit 6a2b2f2

Jason Lepp <jlepp@arcresources.com>
2010-10-15 20:56:02
Wire up events for changing text and buttons.
1 parent f833eee
src/MVPtoMVVM/mappers/ITodoItemMapper.cs
@@ -0,0 +1,10 @@
+using MVPtoMVVM.domain;
+using MVPtoMVVM.presenters;
+
+namespace MVPtoMVVM.mappers
+{
+    public interface ITodoItemMapper
+    {
+        TodoItem MapFrom(ITodoItemPresenter presenter);
+    }
+}
\ No newline at end of file
src/MVPtoMVVM/mappers/TodoItemMapper.cs
@@ -0,0 +1,14 @@
+using System;
+using MVPtoMVVM.domain;
+using MVPtoMVVM.presenters;
+
+namespace MVPtoMVVM.mappers
+{
+    public class TodoItemMapper : ITodoItemMapper
+    {
+        public TodoItem MapFrom(ITodoItemPresenter presenter)
+        {
+            return new TodoItem {Description = presenter.Description, DueDate = presenter.DueDate, Id = presenter.Id};
+        }
+    }
+}
\ No newline at end of file
src/MVPtoMVVM/mappers/TodoItemPresenterMapper.cs
@@ -1,9 +1,7 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
 using System.Linq;
 using MVPtoMVVM.domain;
 using MVPtoMVVM.presenters;
-using MVPtoMVVM.views;
 using StructureMap;
 
 namespace MVPtoMVVM.mappers
@@ -13,7 +11,9 @@ namespace MVPtoMVVM.mappers
         private ITodoItemPresenter MapFrom(TodoItem item)
         {
             var presenter = ObjectFactory.GetInstance<ITodoItemPresenter>();
-            presenter.SetItem(item);
+            presenter.Id = item.Id;
+            presenter.Description = item.Description;
+            presenter.DueDate = item.DueDate;
             return presenter;
         }
 
src/MVPtoMVVM/presenters/ITodoItemPresenter.cs
@@ -1,3 +1,4 @@
+using System;
 using MVPtoMVVM.domain;
 using MVPtoMVVM.views;
 
@@ -6,6 +7,10 @@ namespace MVPtoMVVM.presenters
     public interface ITodoItemPresenter
     {
         void SetView(ITodoItemView view);
-        void SetItem(TodoItem item);
+        void SaveItem();
+        void DeleteItem();
+        int Id { get; set; }
+        string Description { get; set; }
+        DateTime DueDate { get; set; }
     }
 }
\ No newline at end of file
src/MVPtoMVVM/presenters/TodoItemPresenter.cs
@@ -1,13 +1,23 @@
 using System;
 using MVPtoMVVM.domain;
+using MVPtoMVVM.mappers;
+using MVPtoMVVM.repositories;
 using MVPtoMVVM.views;
 
 namespace MVPtoMVVM.presenters
 {
     public class TodoItemPresenter : ITodoItemPresenter
     {
+        private ITodoItemRepository itemRepository;
+        private ITodoItemMapper itemMapper;
         private ITodoItemView view;
-        private TodoItem item;
+        public int Id { get; set; }
+
+        public TodoItemPresenter(ITodoItemRepository itemRepository, ITodoItemMapper itemMapper)
+        {
+            this.itemRepository = itemRepository;
+            this.itemMapper = itemMapper;
+        }
 
         public void SetView(ITodoItemView view)
         {
@@ -17,15 +27,59 @@ namespace MVPtoMVVM.presenters
 
         public void SetItem(TodoItem item)
         {
-            this.item = item;
+            Id = item.Id;
+            Description = item.Description;
+            DueDate = item.DueDate;
+            IsDirty = false;
         }
 
         private void InitializeView()
         {
-            view.Description = item.Description;
-            view.DueDate = item.DueDate;
+            view.Description = Description;
+            view.DueDate = DueDate;
             view.SaveButtonEnabled = false;
         }
 
+        public void SaveItem()
+        {
+            var item = itemMapper.MapFrom(this);
+            itemRepository.Save(item);
+            Id = item.Id;
+            IsDirty = false;
+        }
+
+        public void DeleteItem()
+        {
+            var item = itemMapper.MapFrom(this);
+            itemRepository.Delete(item);
+        }
+
+        private string description;
+        public string Description
+        {
+            get { return description; }
+            set { description = value;
+                IsDirty = true;
+            }
+        }
+
+        private DateTime dueDate;
+        public DateTime DueDate
+        {
+            get { return dueDate; }
+            set { dueDate = value;
+                IsDirty = true;
+            }
+        }
+
+        private bool isDirty;
+        public bool IsDirty
+        {
+            get { return isDirty; }
+            private set { isDirty = value;
+            if (view != null)
+                view.SaveButtonEnabled = isDirty;
+            }
+        }
     }
 }
\ No newline at end of file
src/MVPtoMVVM/repositories/ITodoItemRepository.cs
@@ -5,8 +5,9 @@ namespace MVPtoMVVM.repositories
 {
     public interface ITodoItemRepository
     {
-        void Add(TodoItem item);
+        void Save(TodoItem item);
         TodoItem Get(int id);
         IEnumerable<TodoItem> GetAll();
+        void Delete(TodoItem item);
     }
 }
\ No newline at end of file
src/MVPtoMVVM/repositories/TodoItemRepository.cs
@@ -13,10 +13,10 @@ namespace MVPtoMVVM.repositories
         public TodoItemRepository()
         {
             items = new List<TodoItem>();
-            Add(new TodoItem {Description = "First One", DueDate = DateTime.Today});
+            Save(new TodoItem {Description = "First One", DueDate = DateTime.Today});
         }
 
-        public void Add(TodoItem item)
+        public void Save(TodoItem item)
         {
             if (item.Id == 0)
                 AddItem(item);
@@ -35,6 +35,12 @@ namespace MVPtoMVVM.repositories
         {
             return items.AsEnumerable();
         }
+
+        public void Delete(TodoItem item)
+        {
+            items.Remove(item);
+        }
+
         private void UpdateItem(TodoItem item)
         {
             items.Remove(items.Single(x => x.Id == item.Id));
src/MVPtoMVVM/MVPtoMVVM.csproj
@@ -46,7 +46,9 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="domain\TodoItem.cs" />
+    <Compile Include="mappers\ITodoItemMapper.cs" />
     <Compile Include="mappers\ITodoItemPresenterMapper.cs" />
+    <Compile Include="mappers\TodoItemMapper.cs" />
     <Compile Include="mappers\TodoItemPresenterMapper.cs" />
     <Compile Include="presenters\ITodoItemPresenter.cs" />
     <Compile Include="presenters\TodoItemPresenter.cs" />
src/MVPtoMVVM.mvp/MvpWindow.xaml.cs
@@ -15,6 +15,7 @@ namespace MVPtoMVVM.mvp
             InitializeComponent();
             presenter = ObjectFactory.GetInstance<IMvpPresenter>();
             presenter.SetView(this);
+            
         }
 
         public void SetTodoItems(IEnumerable<ITodoItemPresenter> presenters)
src/MVPtoMVVM.mvp/TodoItemView.xaml.cs
@@ -13,6 +13,10 @@ namespace MVPtoMVVM.mvp
         {
             InitializeComponent();
             presenter.SetView(this);
+            saveButton.Click += (o, e) => presenter.SaveItem();
+            deleteButton.Click += (o, e) => presenter.DeleteItem();
+            description.TextChanged += (o, e) => presenter.Description = description.Text;
+            dueDate.SelectedDateChanged += (o, e) => presenter.DueDate = dueDate.SelectedDate.Value;
         }
 
         public string Description
@@ -32,5 +36,6 @@ namespace MVPtoMVVM.mvp
             get { return saveButton.IsEnabled; }
             set { saveButton.IsEnabled = value; }
         }
+
     }
 }