public TodoItemModel(TodoItem todo)
 {
     todoItemId = todo.TodoItemId;
     title = todo.Title;
     isDone = todo.IsDone;
     todoListId = todo.TodoListId;
 }
        private async void OkButton_Click(object sender, EventArgs e)
        {
            TodoItem todoItem = new TodoItem()
            {
                Title = TitleTextBox.Text,
                TodoListId = todoListId
            };

            HttpResult<TodoItem> result;
            using (TodoClient todoClient = ClientFactory.CreateTodoClient())
            {
                result = await todoClient.AddTodoItemAsync(todoItem);
            }

            if (result.Succeeded)
            {
                this.NavigationService.GoBack();
            }
            else
            {
                ErrorDialog.ShowErrors(result.Errors);
            }
        }
        private async void CheckBox_Click(object sender, RoutedEventArgs e)
        {
            CheckBox checkBox = (CheckBox)sender;
            TodoItemModel todo = GetSelectedTodoItem(sender);
            TodoItem todoItem = new TodoItem() { TodoItemId = todo.TodoItemId, TodoListId = todo.TodoListId, IsDone = checkBox.IsChecked.Value };
            HttpResult result;
            using (TodoClient todoClient = ClientFactory.CreateTodoClient())
            {
                result = await todoClient.UpdateTodoAsync(todoItem);
            }

            if (!result.Succeeded)
            {
                ErrorDialog.ShowErrors(result.Errors);
            }
        }
        private async void TextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            deleteButton.IsEnabled = false; 
            TextBox textBox = (TextBox)sender;
            TodoItemModel todo = GetSelectedTodoItem(sender);

            if (todoTitle != textBox.Text)
            {
                TodoItem todoItem = new TodoItem() { TodoItemId = todo.TodoItemId, TodoListId = todo.TodoListId, Title = textBox.Text };
                HttpResult result;
                using (TodoClient todoClient = ClientFactory.CreateTodoClient())
                {
                    result = await todoClient.UpdateTodoAsync(todoItem);
                }

                if (!result.Succeeded)
                {
                    ErrorDialog.ShowErrors(result.Errors);
                }
            }
        }
        public async Task UpdateTodo()
        {
            string newTitle = "Eat";
            TodoItem update = new TodoItem() { TodoItemId = 1, Title = newTitle };

            HttpResult<TodoItem> result = await client.UpdateTodoAsync(update, returnContent: true);

            Assert.IsNotNull(result, "Result is null");
            Assert.IsTrue(result.Succeeded, GetRequestFailedMessage(result));
            Assert.AreEqual(result.Content.Title, newTitle);
        }
        public async Task AddTodo()
        {
            TodoItem todo = new TodoItem() { TodoItemId = 2, Title = "Eat", IsDone = false, TodoListId = 1 };

            HttpResult<TodoItem> result = await client.AddTodoItemAsync(todo);

            Assert.IsNotNull(result, "Result is null");
            Assert.IsTrue(result.Succeeded, GetRequestFailedMessage(result));
            Assert.AreEqual(result.Content.TodoItemId, todo.TodoItemId);
            Assert.AreEqual(result.Content.Title, todo.Title);
            Assert.AreEqual(result.Content.IsDone, todo.IsDone);
            Assert.AreEqual(result.Content.TodoListId, todo.TodoListId);
        }
 public Task<HttpResult<TodoItem>> UpdateTodoAsync(TodoItem todo, bool returnContent = false)
 {
     ThrowIfDisposed();
     return HttpClient.PatchAsync(GetTodoItemUri(todo.TodoItemId), todo, returnContent);
 }
 public Task<HttpResult<TodoItem>> AddTodoItemAsync(TodoItem todo)
 {
     ThrowIfDisposed();
     return HttpClient.PostAsJsonAsync<TodoItem, TodoItem>(TodosUri, todo);
 }