diff --git a/Sources/BookApp/MainPage.xaml b/Sources/BookApp/MainPage.xaml index 7c226a6..7f67239 100644 --- a/Sources/BookApp/MainPage.xaml +++ b/Sources/BookApp/MainPage.xaml @@ -2,6 +2,7 @@ @@ -37,13 +38,35 @@ + + + + + - + - + @@ -92,9 +115,12 @@ - + - + diff --git a/Sources/BookApp/MainPage.xaml.cs b/Sources/BookApp/MainPage.xaml.cs index a588588..872fca1 100644 --- a/Sources/BookApp/MainPage.xaml.cs +++ b/Sources/BookApp/MainPage.xaml.cs @@ -6,12 +6,10 @@ namespace BookApp { public partial class MainPage : ContentPage { - public MainPage(NavigationViewModel data) + public MainPage(ViewModelManager data) { InitializeComponent(); BindingContext = data; } - - private async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) { } } } diff --git a/Sources/BookApp/MauiProgram.cs b/Sources/BookApp/MauiProgram.cs index ca42509..330d293 100644 --- a/Sources/BookApp/MauiProgram.cs +++ b/Sources/BookApp/MauiProgram.cs @@ -35,7 +35,9 @@ namespace BookApp builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + builder.Services.AddTransient(); // transient pour recharger la data à l'execute diff --git a/Sources/BookApp/Pages/Tous.xaml.cs b/Sources/BookApp/Pages/Tous.xaml.cs index 3158f1d..65d2581 100644 --- a/Sources/BookApp/Pages/Tous.xaml.cs +++ b/Sources/BookApp/Pages/Tous.xaml.cs @@ -1,4 +1,5 @@ using BookApp.ViewModel; +using System.Diagnostics; using VMWrapper; namespace BookApp.Pages @@ -8,6 +9,7 @@ namespace BookApp.Pages public Tous(BookViewModel data) { InitializeComponent(); + Debug.WriteLine("TousPage is initialized."); BindingContext = data; } diff --git a/Sources/BookApp/ViewModel/ViewModelManager.cs b/Sources/BookApp/ViewModel/ViewModelManager.cs index c52ac5c..f23966d 100644 --- a/Sources/BookApp/ViewModel/ViewModelManager.cs +++ b/Sources/BookApp/ViewModel/ViewModelManager.cs @@ -1,14 +1,17 @@ using Model; using System.Collections.ObjectModel; +using ToolKit; using VMWrapper; -using static System.Runtime.InteropServices.JavaScript.JSType; namespace BookApp.ViewModel; -public class ViewModelManager +public class ViewModelManager : BaseViewModel { BookViewModel _viewModel; + public ObservableCollection Authors { get; set; } = new ObservableCollection(); + public ViewModelMenu ViewModelMenu { get; } = new ViewModelMenu(); + public ViewModelNavigation ViewModelNavigation { get; } = new ViewModelNavigation(); public ViewModelManager(BookViewModel viewModel) { diff --git a/Sources/BookApp/ViewModel/ViewModelMenu.cs b/Sources/BookApp/ViewModel/ViewModelMenu.cs index eaf5952..98d02c8 100644 --- a/Sources/BookApp/ViewModel/ViewModelMenu.cs +++ b/Sources/BookApp/ViewModel/ViewModelMenu.cs @@ -4,64 +4,63 @@ namespace BookApp.ViewModel { public class ViewModelMenu { - public string Name { get; set; } - public string Icone { get; set; } - public int Number { get; set; } - public string Route { get; set; } - public bool IsLastItem { get; set; } + public ObservableCollection MenuItemsLivre { get; set; } + public ObservableCollection MenuItemsFiltre { get; set; } - public ViewModelMenu( - string name, - string icone, - int number, - string route, - bool isLastItem = false - ) + public ViewModelMenu() { - Name = name; - Icone = icone; - Number = number; - Route = route; - IsLastItem = isLastItem; - } - - public ObservableCollection MyCollections1 { get; set; } = - new ObservableCollection() + MenuItemsLivre = new ObservableCollection() { - new ViewModelMenu("Tous", "./Resources/Images/tray_2_fill.svg", 250, "Tous"), - new ViewModelMenu( + new ViewModelMenuItem( + "Tous", + "../Resources/Images/tray_2_fill.svg", + 250, + "TousPage" + ), + new ViewModelMenuItem( "En prêt", - "./Resources/Images/person_badge_clock_fill.svg", + "../Resources/Images/person_badge_clock_fill.svg", 250, "EmpruntsPrets" ), - new ViewModelMenu( + new ViewModelMenuItem( "À lire plus tard", - "./Resources/Images/arrow_forward.svg", + "../Resources/Images/arrow_forward.svg", 250, "" ), - new ViewModelMenu( + new ViewModelMenuItem( "Statut de lecture", - "./Resources/Images/eyeglasses.svg", + "../Resources/Images/eyeglasses.svg", 250, "" ), - new ViewModelMenu("Favoris", "./Resources/Images/heart_fill.svg", 250, ""), - new ViewModelMenu("Étiquettes", "./Resources/Images/tag_fill.svg", 250, "", true), + new ViewModelMenuItem("Favoris", "../Resources/Images/heart_fill.svg", 250, ""), + new ViewModelMenuItem( + "Étiquettes", + "../Resources/Images/tag_fill.svg", + 250, + "", + true + ), }; - public ObservableCollection MyCollections2 { get; set; } = - new ObservableCollection() + MenuItemsFiltre = new ObservableCollection() { - new ViewModelMenu("Auteur", "./Resources/Images/person_fill.svg", 250, "Filtrage"), - new ViewModelMenu( + new ViewModelMenuItem( + "Auteur", + "../Resources/Images/person_fill.svg", + 250, + "Filtrage" + ), + new ViewModelMenuItem( "Date de publication", - "./Resources/Images/calendar.svg", + "../Resources/Images/calendar.svg", 250, "" ), - new ViewModelMenu("Note", "./Resources/Images/sparkles.svg", 250, "", true), + new ViewModelMenuItem("Note", "../Resources/Images/sparkles.svg", 250, "", true), }; + } } } diff --git a/Sources/BookApp/ViewModel/ViewModelMenuItem.cs b/Sources/BookApp/ViewModel/ViewModelMenuItem.cs new file mode 100644 index 0000000..3040cd4 --- /dev/null +++ b/Sources/BookApp/ViewModel/ViewModelMenuItem.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BookApp.ViewModel +{ + public class ViewModelMenuItem + { + public string Name { get; set; } + public string Icone { get; set; } + public int Number { get; set; } + public string Route { get; set; } + public bool IsLastItem { get; set; } + + public ViewModelMenuItem( + string name, + string icone, + int number, + string route, + bool isLastItem = false + ) + { + Name = name; + Icone = icone; + Number = number; + Route = route; + IsLastItem = isLastItem; + } + } +} diff --git a/Sources/BookApp/ViewModel/ViewModelNavigation.cs b/Sources/BookApp/ViewModel/ViewModelNavigation.cs index ba3489f..840568a 100644 --- a/Sources/BookApp/ViewModel/ViewModelNavigation.cs +++ b/Sources/BookApp/ViewModel/ViewModelNavigation.cs @@ -1,32 +1,42 @@ using ToolKit; using System.Windows.Input; using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Diagnostics; namespace BookApp.ViewModel { - public class NavigationViewModel : BaseViewModel + public class ViewModelNavigation : BaseViewModel { - public NavigationViewModel() { } + private ViewModelMenuItem _selectedItem; + public ViewModelMenuItem SelectedItem + { + get { return _selectedItem; } + set { SetProperty(ref _selectedItem, value); } + } + + public ICommand ItemSelectedCommand { get; private set; } + + public ViewModelNavigation() + { + ItemSelectedCommand = new Command(async () => await OnItemSelected(SelectedItem)); + } - private async void OnSelectionChanged(object sender, SelectionChangedEventArgs e) + private async Task OnItemSelected(ViewModelMenuItem selectedItem) { - if (e.CurrentSelection.FirstOrDefault() is ViewModelMenu selectedItem) + SelectedItem = selectedItem; + + if (string.IsNullOrEmpty(SelectedItem?.Route)) + return; + + try + { + await Shell.Current.GoToAsync(selectedItem.Route); + selectedItem = null; + } + catch (Exception ex) { - if (!string.IsNullOrWhiteSpace(selectedItem.Route)) - { - Type pageType = Type.GetType("BookApp.Pages." + selectedItem.Route); - if (pageType == null) - { - return; - } - - Page pageInstance = (Page)Activator.CreateInstance(pageType); - // await Navigation.PushAsync(pageInstance); - } - else - { - Console.WriteLine("Erreur trouvé"); - } + Debug.WriteLine($"Navigation failed: {ex.Message}"); } } diff --git a/Sources/ToolKit/BaseViewModel.cs b/Sources/ToolKit/BaseViewModel.cs index e5f5dd4..d8c71ea 100644 --- a/Sources/ToolKit/BaseViewModel.cs +++ b/Sources/ToolKit/BaseViewModel.cs @@ -7,23 +7,22 @@ namespace ToolKit { public event PropertyChangedEventHandler PropertyChanged; - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) - { + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); - } - protected bool SetProperty( - ref T backingField, + protected virtual void SetProperty( + ref T backingStore, T value, - [CallerMemberName] string propertyName = null + [CallerMemberName] string propertyName = "", + Action onChanged = null ) { - if (EqualityComparer.Default.Equals(backingField, value)) - return false; + if (EqualityComparer.Default.Equals(backingStore, value)) + return; - backingField = value; + backingStore = value; + onChanged?.Invoke(); OnPropertyChanged(propertyName); - return true; } } }