using CommunityToolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using TodoDetails.Model; using TodoDetails.Services; using TodoDetails.View; namespace TodoDetails.ViewModel { public partial class TodosViewModel : BaseViewModel { public ObservableCollection Todos { get; } = new ObservableCollection(); TodoService todoService; public TodosViewModel(TodoService todoService) { Title = "Todos"; this.todoService = todoService; } [RelayCommand] async Task GetTodosAsync() { if (IsBusy) { return; } try { IsBusy = true; var todos = await todoService.GetTodos(); if (Todos.Count != 0) { Todos.Clear(); } foreach (var todo in todos) { Todos.Add(todo); } } catch (Exception e) { Debug.WriteLine($"UInable to get todos: {e.Message}"); await Shell.Current.DisplayAlert("Error!", e.Message, "OK"); } finally { IsBusy = false; } } [RelayCommand] async Task GoToDetails(Todo todo) { if (todo == null) { return; } await Shell.Current.GoToAsync( nameof(TodoDetailsPage), true, new Dictionary() { { nameof(Todo), todo } }); } } }