2017-10-18 27 views
2

J'ai mon modèle A avec quelques propriétés, je reçois des données du service web REST J'utilise SQlite pour la mise en cache locale. Avec SQLite api je peux utiliser mi class A pour créer automatiquement des tables et après récupérer des données. Thats OkComment implémenter MVVM dans Xamarin.Forms avec SQLite pour remplir une Listview qui nécessite INotifyPropertyChanged/Icommand dans chaque ligne

Maintenant, j'ai besoin d'obtenir ces données sous forme de liste pour peupler une liste, comme un Todo-Item avec une vérification (fait - pas fait) pour mettre à jour un booléen chaque fois que l'utilisateur clique sur i besoin INotifyPropertyChanged par ligne

Mon choix je pense sont:

1) Récupérer la liste complète avec SQLite api je vais obtenir une liste. Mais je n'ai pas les modifications INotifyPropertyChanged ici. Donc, je devrais convertir toute la liste à la liste qui aura INotifyPropertyChanged et ICommand mis en œuvre. Cela va ajouter un processus supplémentaire. 2) Hérite ViewModel directement à partir de Model afin que je puisse récupérer la liste directement à partir de SQLite.net, mais je devrais faire une autre méthode dans le client sqlite pour cette façon spécifique de récupérer. et je vais utiliser pour accéder à SQLite de modèle et ViewModel aussi, je pense que cela ne devrait pas être le faire de cette façon

3) Ajouter INotifyPropertyChanged et ICommand au modèle ...

i essayer d'aborder ces 3 chemin mais je n'aime vraiment pas le code résultant. est-il une autre façon de le faire ou une suggestion pour améliorer les options actuelles pls?

Répondre

0

La meilleure façon dans votre cas serait de créer un ViewModel pour un élément de la liste, qui implantera INotifyPropertyChanged et contiennent ICommand champs, et l'initialiser avec des données à partir d'un Model (que ce soit par ctor ou en créant un factory) . De cette façon, vous obtiendrez une liste de ViewModel s implémentant toutes les fonctionnalités requises.
C'est une approche assez courante.

+0

donc pour la récupération des éléments la bonne approche sera à partir du ViewModel de la page, appelez client SQLite où je recevrai une liste et juste après convertir en List . Je le vois avec une classe ListItemViewModel où je peux mettre en œuvre la liste INotifyPropertyChanged aussi parse également chaque ItemModel à ItemViewModel ... et l'étape suivante peuplent ListView à droite? Êtes-vous d'accord avec cela? –

+0

@RicardoAlvarezCastillo, Je suis totalement d'accord avec la partie où vous convertissez une 'List ' en' List '. Typiquement ceci est fait avec la classe 'Factory' ayant la méthode' ItemViewModel Convert (ItemModel) '. – foxanna

+0

@ RicardoAlvarezCastillo, peut-être qu'il me manque quelque chose? Pourquoi voulez-vous que 'List' implémente' INotifyPropertyChanged'? Ce devrait être 'ItemViewModel' qui l'implémente. – foxanna