J'ai besoin de conseils sur la mise en œuvre des interfaces utilisateur dans WPF. Jusqu'ici, j'ai utilisé Code-Behinds, ce qui est extrêmement facile à démarrer, mais bon quand on le maintient/change/test.Besoin de conseils sur la mise en œuvre de l'interface utilisateur dans WPF
J'ai regardé MVP (et sa variante WPF - MVVM), mais j'ai eu quelques problèmes pour démarrer.
En supposant que j'ai une interface utilisateur de construire, voici ce que je pense que je dois faire:
1. Créer une classe de médiateur « interface principale » qui spécifie toutes les opérations de haut niveau (LoadSettings(), SetVisibility()) et les événements (non déclenchés par l'utilisateur, par exemple, les données de modèle modifiées) que mon interface utilisateur prend en charge.
2. Créer les classes "modèles" pour représenter les données
3. Créer des classes "ViewModel" pour mes classes de modèle. Pour les comportements complexes (par exemple, une séquence d'opérations doit être effectuée avant que l'interface utilisateur puisse/doit mettre à jour, telle que la modification d'éléments dans une collection), ne comptez pas sur ViewModels pour mettre à jour l'interface utilisateur. Au lieu de cela, faites-le manuellement à travers la classe Main Mediator UI.
5. Pour les comportements simples (par exemple, basculement entre les états de visibilité/activé/etc), utilisez la liaison WPF pour lier directement les propriétés de ViewModels à l'interface utilisateur. Dans ce cas, la classe Mediator de l'interface principale maintiendrait les objets ViewModel et Model, et déléguerait les interactions utilisateur (au modèle) et les demandes de mise à jour de l'interface utilisateur (au ViewModel/View) de manière appropriée. La classe Mediator fournit également une interface centralisée qui spécifie les fonctionnalités de l'interface utilisateur, tout en agissant en tant que gestionnaire de changement (décrit dans le modèle d'observateur du GOF) pour gérer le comportement complexe de l'interface utilisateur/réduire les mises à jour redondantes.
Suis-je sur la bonne voie? Devrais-je modifier mon approche? Changer complètement? Pour le moment, je n'ai pas l'expérience/les connaissances nécessaires pour mettre en œuvre des interfaces utilisateur gigantesques/complexes, donc je ne sais pas vraiment si je suis sur la bonne voie.
Merci
Salut Paul, merci pour la réponse. Je voulais juste commenter le bit Change Manager. J'ai utilisé un peu de INotifyPropertyChanged dans mon code, et ça a été génial de mettre à jour immédiatement (et facilement) l'interface utilisateur pour refléter les changements (visibilité, isenabled, contenu, etc.). Cependant, j'ai également remarqué que lorsque vous travaillez avec des comportements complexes (par exemple, notification complexe, notification retardée (tout mettre à jour avant de demander l'interface utilisateur à mettre à jour), etc.), INotifyPropertyChanged est parfois invoqué un peu trop souvent pour plus de confort. –
Vous avez une autre question: actuellement MVVM s'appuie fortement sur la liaison et les commandes. Si je devais implémenter ceci dans quelque chose d'autre que WPF (comme WinForms), quelle serait l'approche recommandée?La raison pour laquelle j'ai mentionné la classe Mediator/Change Manager dans ma question était parce qu'il me semblait que ce serait quelque chose que je pourrais facilement transférer entre WPF et WinForms (ou toute autre bibliothèque GUI). –