# PocketBook - Projet MVVM ## Organisation - Les pages sont disponibles dans le dossier [_**Pages**_]("https://codefirst.iut.uca.fr/git/lucas.evard/PocketBook/src/branch/master/sources/PocketBook/Pages"). - Les ContentView réutilisé dans les pages se trouvent dans le dossier [_**Composants/ContentView**_]("https://codefirst.iut.uca.fr/git/lucas.evard/PocketBook/src/branch/master/sources/PocketBook/Pages/Composants/ContentView"). - Les VM applicatives sont à l'intérieur du projet MAUI, dans le dossier [_**Applicative_VM**_]("https://codefirst.iut.uca.fr/git/lucas.evard/PocketBook/src/branch/master/sources/PocketBook/Applicative_VM"). - Les VM wrappant les classes du modèle sont présent dans une bibliothèque de classes externe au projet MAUI, dans le dossier [_**ViewModel**_]("https://codefirst.iut.uca.fr/git/lucas.evard/PocketBook/src/branch/master/sources/ViewModel"). ## Mon toolkit MVVM Un toolkit MVVM a été mis en place afin de soulager les écritures redondantes pour wrapper le modèle et pour la gestion des modification de propriétés. classDiagram class RelayCommand { +execute: Action +canExecute: Func -CanExecuteChanged: EventHandler? +RelayCommand(execute: Action, canExecute: Func) +CanExecute(parameter: object?): bool +Execute(parameter: object?): void } class RelayCommand { -baseRelayCommand: RelayCommand +RelayCommand(execute: Action, canExecute: Func) +Execute(): async Task } class ObservableObject { +PropertyChanged: PropertyChangedEventHandler? +OnPropertyChanged(propertyName: string): void +SetProperty(ref member: T, value: T, propertyName: string): void +SetProperty(member: T, value: T, action: Action, propertyName: string): void } class BaseViewModel { +Model: TModel -model: TModel +BaseViewModel(model: TModel) +BaseViewModel() } class BaseViewModel { } RelayCommand <|-- RelayCommand ObservableObject <|-- BaseViewModel BaseViewModel <|-- BaseViewModel - Navigation - La plupart des pages - Utilisation de vues différentes - Création de vues personnalisées - Utilisation des fichiers de ressources (couleurs/styles) - Utilisation des polices d'écriture - Thème sombre (besoin de reload l'application pour que les images s'affiche de la bonne couleur) ## Ce qui ne fonctionne pas - Le menu contextuel lorsque l'on appuie sur le "+" - La gestion des onglets dans la page "Emprunts et Prêts" - Le rendu entre Android et iOS diffère sur certaines images