Question

Imaginez que vous avez un objet de données complexe. Il était assez complexe que pour éditer les différentes propriétés de l'objet, il serait préférable que l'utilisateur ait plusieurs écrans. C'est essentiellement un panier d'achat pour les articles configurés.

Donc, un écran vous permettrait d'ajouter des éléments. Un autre vous permettrait d'ajouter des modifications à ces éléments, des modifications prédéterminées ayant un coût associé. Un troisième écran vous permettrait de configurer les paramètres globaux pour vos articles.

Comme je suis sûr que vous pouvez deviner, chaque écran fonctionne sur exactement le même chariot, modifiant simplement différentes propriétés et relations des articles à l'intérieur.

Donc, nous allons essayer d'écrire l'application à l'aide de MVVM, et tout en discutant des différents écrans (ainsi que la navigation entre eux), nous sommes arrivés à la question suivante:

Comment les gens gèrent-ils généralement l'état de l'application lors de l'utilisation de MVVM? La barre de navigation que les utilisateurs utilisera pour modifier des écrans existeront en dehors de l'écran, mais lorsqu'un utilisateur clique dessus, de quelles façons courantes utilisent-elles pour en cacher une et montrer une autre?

Plus généralement, comment les personnes manipulent-elles l'état de l'application mondiale? L'utilisateur ne peut fonctionner que sur un panier à une époque, il ne peut y avoir qu'un seul utilisateur connecté à la fois, un seul écran peut être affiché à la fois. Serait-il préférable de créer un singleton qui stocké ces propriétés importantes et que les menuisiers pourraient en garder une copie et souscrire à des modifications via un agrégateur d'événement?

Comme vous pouvez le dire, je sais à peine où commencer avec ce problème, de sorte que tout conseil est accueilli et approprié.

Était-ce utile?

La solution

I would use ViewModels to track the application state.

One ViewModel controls the entire application, and it handles what page the user is currently on. The application itself is bound to the main ViewModel, and the majority of the application screen space is a ContentControl that is bound to ViewModel.CurrentPage. DataTemplates are then used to determine which View to display for whatever page the user is currently on

In the past I've used a global singleton for some objects (such as current user) and the ViewModels use a reference to this if needed. So if I wanted to display the UserName on a page, I'd have a property in the ViewModel called UserName and it returns Global.Instance.CurrentUser.UserName

Autres conseils

For your type of situation I would look into PRISM. PRISM is a collection of patterns for developing WPF applications in a loosely coupled MVVM manner.

PRISM Region Manager Example

Specifically, for your example of the multiple screens and managing application state, using a "Controller" to load the views for the various representations of your ViewModel (the cart) into separate "Regions" would probably be a good start. There looks to be a great article on MSDN about getting started with PRISM, including composing user interfaces (Regions).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top