public TodoListPageModel(ITodoItemService todoItemService)
        {
            _todoItemService = todoItemService;
            Todos            = new ObservableCollection <TodoItemViewModel>();

            // Todo: Unsubscribe events in case the view models view would be removed from the navigation stack
            MessagingCenter.Instance.Subscribe <ITodoItemService, TodoItem>(
                this,
                Messages.TodoItemsAdded,
                (sender, todo) =>
            {
                Todos.Add(new TodoItemViewModel(_todoItemService, todo));
            });

            MessagingCenter.Instance.Subscribe <ITodoItemService, TodoItem>(
                this,
                Messages.TodoItemsRemoved,
                (sender, todo) =>
            {
                var vm = Todos.SingleOrDefault(t => t.TodoItem.Id == todo.Id);

                if (vm != null)
                {
                    Todos.Remove(vm);
                }
            });

            AddTodoCommand = new Command(
                () =>
            {
                CoreMethods.PushPageModel <AddTodoItemPageModel>();
            });

            DeleteTodoCommand = new Command <TodoItemViewModel>(
                async(todo) =>
            {
                if (await CoreMethods.DisplayAlert(
                        "Delete todo",
                        $"Do you really want to delete todo '{todo.Name}'?",
                        "Yes", "No") == false)
                {
                    return;
                }

                await _todoItemService.RemoveTodoAsync(todo.TodoItem);
                SelectedTodo = null;
                DeleteTodoCommand.ChangeCanExecute();
            },
                (todo) => SelectedTodo != null);
        }