Frage

Stellen Sie sich vor, Sie haben ein komplexes Datenobjekt. Es war komplex genug, um die verschiedenen Eigenschaften des Objekts zu bearbeiten, es wäre am besten für den Benutzer, mehrere Bildschirme zu haben. Es ist im Wesentlichen ein Warenkorb für konfigurierte Elemente.

Es ermöglicht Ihnen also einen Bildschirm, Elemente hinzuzufügen. Ein anderer würde es Ihnen ermöglichen, Modifikationen an diese Elemente hinzuzufügen, vorgegebene Änderungen, die ein kostengünstiger Kosten haben. Mit einem dritten Bildschirm können Sie globale Einstellungen für Ihre Artikel konfigurieren.

Wie ich sicher bin, dass Sie erraten können, arbeitet jeder Bildschirm auf dem gleichen Wagen, der nur verschiedene Eigenschaften und Beziehungen der Elemente innen ändert.

Also werden wir versuchen, die Anwendung mit MVVM zu schreiben, und diskutieren, während wir die verschiedenen Bildschirme (sowie die Navigation zwischen ihnen) diskutieren, die wir unter folgender Frage ankamen:

Wie verwalten die Menschen im Allgemeinen den Anmeldezustand bei der Verwendung von MVVM? In der Navigationsleiste, die die Benutzer verwenden, um Bildschirme zu ändern

Im Allgemeinen, wie geht es den Menschen, die den globalen Anwendungszustand handhabt? Der Benutzer kann jeweils nur auf einem Wagen arbeiten, es kann nur ein Benutzer, der in einer Zeit eingeloggt ist. Es kann nur ein Bildschirm angezeigt werden. Es wäre am besten, ein Singleton zu erstellen, das diese wichtigen Eigenschaften gespeichert hat und die ViewModels eine Kopie von ihnen halten und Änderungen über einen Event-Aggregator abonnieren?

Wie Sie können, wie Sie sagen können, weiß ich kaum, wo Sie mit diesem Problem beginnen sollen, so dass jeder Rat überhaupt begrüßt und entzählt wird.

War es hilfreich?

Lösung

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

Andere Tipps

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top