using ToolKit; using System.Windows.Input; using System.Diagnostics; using Model; namespace BookApp.ViewModel { public class ViewModelNavigation : BaseViewModel { private ViewModelMenuItem _selectedItem; public ViewModelMenuItem SelectedItem { get { return _selectedItem; } set { SetProperty(ref _selectedItem, value); } } private Book _selectedBook; public Book SelectedBook { get { return _selectedBook; } set { SetProperty(ref _selectedBook, value); } } public INavigation Navigation { get; set; } public ICommand MenuItemsFiltre { get; private set; } public ICommand ItemSelectedCommandMain { get; private set; } public ICommand BookSelected { get; private set; } public ICommand BackButtonCommand { get; private set; } public ViewModelNavigation() { MenuItemsFiltre = new Command(async () => await OnItemSelected(SelectedItem)); ItemSelectedCommandMain = new Command(async () => await OnItemSelected(SelectedItem)); BackButtonCommand = new Command(async () => await BackButton(this, EventArgs.Empty)); BookSelected = new Command(async () => await OnBookSelected(SelectedBook)); } private async Task OnItemSelected(ViewModelMenuItem selectedItem) { SelectedItem = selectedItem; if (string.IsNullOrEmpty(SelectedItem?.Route)) { return; } try { await Shell.Current.GoToAsync(selectedItem.Route); } catch (Exception ex) { Debug.WriteLine($"Navigation failed: {ex.Message}"); } } private async Task OnBookSelected(Book SelectedBook) { if (SelectedBook == null) { return; } try { await Shell.Current.GoToAsync("DetailBookPage"); } catch (Exception ex) { Debug.WriteLine($"Navigation failed: {ex.Message}"); } } async Task BackButton(object sender, EventArgs args) { if (Shell.Current.Navigation.NavigationStack.Count > 1) { await Shell.Current.Navigation.PopAsync(); } } } }