using MobApp.Models; using MobApp.Views; using System; using System.Collections.ObjectModel; using System.Diagnostics; using System.Threading.Tasks; using Xamarin.Forms; namespace MobApp.ViewModels { public class ItemsViewModel : BaseViewModel { private Item _selectedItem; public ObservableCollection Items { get; } public Command LoadItemsCommand { get; } public Command AddItemCommand { get; } public Command ItemTapped { get; } public ItemsViewModel() { Title = "Browse"; Items = new ObservableCollection(); LoadItemsCommand = new Command(async () => await ExecuteLoadItemsCommand()); ItemTapped = new Command(OnItemSelected); AddItemCommand = new Command(OnAddItem); } async Task ExecuteLoadItemsCommand() { IsBusy = true; try { Items.Clear(); var items = await DataStore.GetItemsAsync(true); foreach (var item in items) { Items.Add(item); } } catch (Exception ex) { Debug.WriteLine(ex); } finally { IsBusy = false; } } public void OnAppearing() { IsBusy = true; SelectedItem = null; } public Item SelectedItem { get => _selectedItem; set { SetProperty(ref _selectedItem, value); OnItemSelected(value); } } private async void OnAddItem(object obj) { await Shell.Current.GoToAsync(nameof(NewItemPage)); } async void OnItemSelected(Item item) { if (item == null) return; // This will push the ItemDetailPage onto the navigation stack await Shell.Current.GoToAsync($"{nameof(ItemDetailPage)}?{nameof(ItemDetailViewModel.ItemId)}={item.Id}"); } } }