2009-05-28 8 views
1

Je comprends que dans le modèle MVVM, un ViewModel ne devrait rien savoir de la vue.Quelle est la meilleure façon pour ViewModel de manipuler la vue?

Donc, il semble y avoir deux façons que le ViewModel peut cause de quelque chose de particulier se produise sur la UI, considérer ce flux commun d'événements:

  • types d'utilisateurs quelque chose dans une zone de texte
  • l'utilisateur clique sur le bouton
  • bouton Appels DelegateCommand appelé "Enregistrer" sur viewmodel
  • Voir le modèle enregistre le texte de la zone de texte
  • si tout va bien au cours de la sauvegarde, le modèle de vue change sa propriété INotifyPropertyChanged appelé SaveStatus à « Réussi »

maintenant dans la vue, j'ai deux façons de permettre ce changement de avoir un effet sur l'interface utilisateur:

  • dans la vue il pourrait y avoir un Textblock qui a un Converter sur ce qui convertit le texte de SaveStatus à une phrase telle que « le sauver s dépassé. "
  • dans la vue il pourrait y avoir un Trigger qui vérifie si SaveStatus = « Réussi » et si oui, puis une série de Setters changer l'interface utilisateur appropriée (éléments cacher, changer les textes, en changeant les couleurs, etc.)

Est-ce le flux base d'informations de MODELVIEW pour voir que vous utilisez dans vos applications?

Répondre

1

Vous pouvez également créer des événements personnalisés sur le viewmodel et faire en sorte que la vue s'y abonne et réagir en conséquence. Vous ne devriez pas avoir besoin de le faire très souvent, mais cela a plus de sens que d'inspecter chaque événement INotifyPropertyChanged pour des noms de propriété particuliers.

0

Nous utilisons le modèle du contrôleur de vue du modèle, il va comme ceci:

  • types d'utilisateurs quelque chose dans une zone de texte
  • utilisateur clique bouton Enregistrer
  • la vue indique au contrôleur pour enregistrer les données
  • le contrôleur indique la vue de récupérer les données
  • le contrôleur enregistre les données au modèle
  • c ontroller signalise avis que la sauvegarde a réussi
  • la vue montre « La sauvegarde a réussi »

Je pense que vous pouvez utiliser à peu près la même approche (la seule différence serait que le contrôleur et le modèle serait à la fois la voir le modèle dans votre exemple)

0

Est-ce le flux d'informations de base de ModelView à View que vous utilisez dans vos applications?

Oui. Nous utilisons presque exclusivement INotifyPropertyChanged pour les changements du ViewModel à la vue. Lorsque l'interaction est un peu plus complexe, nous utilisons d'autres événements auxquels la vue se connecte.

Au lieu d'une propriété de message SaveStatus, nous avons un booléen HasChanges sur un EditableAdapter, qui enveloppe notre POCO et fournit un commit/rollback des changements, ainsi que d'autres propriétés calculées. Ensuite, nous pouvons lier nos vues à ce HasChanges afin que, par exemple, nous puissions afficher le nom du document avec un * à la fin pour montrer qu'il a des modifications, ou utiliser HasChanges pour désactiver/activer un bouton Enregistrer.

Questions connexes