Commit 1471213

Jason Lepp <jlepp@arcresources.com>
2010-10-15 21:35:55
Tie the deletion to the parent window
1 parent 50b064f
src/MVPtoMVVM/presenters/IMvpPresenter.cs
@@ -7,5 +7,6 @@ namespace MVPtoMVVM.presenters
         void SetView(IMvpView view);
         void AddNewItem();
         void CancelAllChanges();
+        void Remove(int itemId);
     }
 }
\ No newline at end of file
src/MVPtoMVVM/presenters/MvpPresenter.cs
@@ -1,10 +1,10 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
 using MVPtoMVVM.domain;
 using MVPtoMVVM.mappers;
 using MVPtoMVVM.repositories;
 using MVPtoMVVM.views;
+using System.Linq;
 
 namespace MVPtoMVVM.presenters
 {
@@ -39,6 +39,11 @@ namespace MVPtoMVVM.presenters
             RefreshItems();
         }
 
+        public void Remove(int itemId)
+        {
+            view.SetTodoItems(view.GetTodoItems().Where(x => x.Id != itemId));
+        }
+
         private void InitializeView()
         {
             RefreshItems();
src/MVPtoMVVM/presenters/TodoItemPresenter.cs
@@ -35,6 +35,7 @@ namespace MVPtoMVVM.presenters
 
         private void InitializeView()
         {
+            view.Id = Id;
             view.Description = Description;
             view.DueDate = DueDate;
             view.SaveButtonEnabled = false;
@@ -51,7 +52,8 @@ namespace MVPtoMVVM.presenters
         public void DeleteItem()
         {
             var item = itemMapper.MapFrom(this);
-            itemRepository.Delete(item);
+            view.Remove(item.Id);
+            itemRepository.Delete(item);            
         }
 
         private string description;
src/MVPtoMVVM/repositories/TodoItemRepository.cs
@@ -8,7 +8,7 @@ namespace MVPtoMVVM.repositories
     public class TodoItemRepository : ITodoItemRepository
     {
         private static readonly List<TodoItem> items = new List<TodoItem>();
-        private int totalItems = 0;
+        private static int totalItems;
 
         public TodoItemRepository()
         {
@@ -38,12 +38,14 @@ namespace MVPtoMVVM.repositories
 
         public void Delete(TodoItem item)
         {
-            items.Remove(item);
+            var repoItem = items.Find(x => x.Id == item.Id);
+            items.Remove(repoItem);
         }
 
         private void UpdateItem(TodoItem item)
         {
-            items.Remove(items.Single(x => x.Id == item.Id));
+            var oldItem = items.Single(x => x.Id == item.Id);
+            items.Remove(oldItem);
             items.Add(item);
         }
 
src/MVPtoMVVM/views/ITodoItemView.cs
@@ -1,13 +1,16 @@
 using System;
+using MVPtoMVVM.domain;
 using MVPtoMVVM.presenters;
 
 namespace MVPtoMVVM.views
 {
     public interface ITodoItemView
     {
+        int Id { get; set; }
         string Description { get; set; }
         DateTime DueDate { get; set; }
         bool SaveButtonEnabled { get; set; }
         ITodoItemPresenter Presenter { get; }
+        void Remove(int itemId);
     }
 }
\ No newline at end of file
src/MVPtoMVVM.mvp/MvpWindow.xaml.cs
@@ -21,7 +21,7 @@ namespace MVPtoMVVM.mvp
 
         public void SetTodoItems(IEnumerable<ITodoItemPresenter> presenters)
         {
-            todoItemsList.ItemsSource = presenters.Select(x => new TodoItemView(x));
+            todoItemsList.ItemsSource = presenters.Select(x => new TodoItemView(x, presenter));
         }
 
         public IEnumerable<ITodoItemPresenter> GetTodoItems()
src/MVPtoMVVM.mvp/TodoItemView.xaml.cs
@@ -1,4 +1,5 @@
 using System;
+using MVPtoMVVM.domain;
 using MVPtoMVVM.presenters;
 using MVPtoMVVM.views;
 
@@ -9,8 +10,11 @@ namespace MVPtoMVVM.mvp
     /// </summary>
     public partial class TodoItemView : ITodoItemView
     {
-        public TodoItemView(ITodoItemPresenter presenter)
+        private readonly IMvpPresenter parent;
+
+        public TodoItemView(ITodoItemPresenter presenter, IMvpPresenter parent)
         {
+            this.parent = parent;
             Presenter = presenter;
             InitializeComponent();
             presenter.SetView(this);
@@ -20,6 +24,8 @@ namespace MVPtoMVVM.mvp
             dueDate.SelectedDateChanged += (o, e) => presenter.DueDate = dueDate.SelectedDate.Value;
         }
 
+        public int Id{ get; set; }
+
         public string Description
         {
             get { return description.Text; }
@@ -39,5 +45,9 @@ namespace MVPtoMVVM.mvp
         }
 
         public ITodoItemPresenter Presenter { get; private set; }
+        public void Remove(int itemId)
+        {
+            parent.Remove(itemId);
+        }
     }
 }