using System; using System.Collections.ObjectModel; using Caliburn; using Caliburn.Actions; using Caliburn.Events.Brokering; namespace Samples.TodoListModule { public class TodoListPresenter { private ObservableCollection _todos; public ObservableCollection Todos { get { if (_todos == null) _todos = new ObservableCollection(); return _todos; } } public ActionCommand MarkAllDoneCommand { get { return new ActionCommand(this, MarkAllDone, (x) => _todos.Count > 0); } } public void MarkAllDone(object parameter) { foreach (Todo todo in _todos) { todo.IsDone = true; } } public void New() { Edit(new Todo()); } public void Edit(Todo todo) { TodoPresenter presenter = DI.Resolve(); presenter.Todo = todo; OnAddPresenterRequested(presenter); } [Subscribe("event://Module/Todo/Save")] public void Save(Todo todo) { if (!_todos.Contains(todo)) { todo.Id = Guid.NewGuid(); _todos.Add(todo); } } [Subscribe("event://Module/Todo/Delete")] public void Delete(Todo todo) { _todos.Remove(todo); } [Publish("event://Shell/Presenter/AddRequested")] public event Action AddPresenterRequested; protected virtual void OnAddPresenterRequested(TodoPresenter presenter) { if (AddPresenterRequested != null) AddPresenterRequested(presenter); } } }