2010-11-09 15 views
3

J'ai utilisé WPF et Xaml pendant un certain temps et je l'aime beaucoup. Cependant, je suis toujours en train de concevoir des choses comme je l'ai fait dans les jours WinForm avec trop de code et de responsabilité dans la section GUI.À quoi sert une interface graphique WPF?

De toute façon, dans le modèle WPF, à quoi correspond exactement l'interface graphique? Si un bouton dans l'interface graphique est cliqué, devrait-il afficher le popup et gérer les valeurs mises à jour? S'il existe une logique de validation, doit-il vérifier et mettre à jour les champs manquants/invalides? Devrait-il gérer la logique du gestionnaire d'événements, telle que les clics, la valeur modifiée, etc.?

Cette liste pourrait probablement continuer et un. Cependant, je suppose que la question fondamentale est la suivante: l'interface graphique doit-elle seulement afficher les données d'une classe et gérer l'acquisition de nouvelles données dans la classe? Toutes les autres choses qui sont pratiquement tout devraient être traitées ailleurs.

+0

Vous ne l'avez peut-être pas bien exprimé. Le travail de l'interface graphique est de fournir un moyen simple et facile à utiliser pour votre utilisateur d'interagir avec votre programme. Tout ce qui est nécessaire pour créer cette interface graphique est votre travail. –

Répondre

3

un wpf gui pourrait techniquement faire n'importe quoi selon l'approche. Vous devriez voir quelques-unes des premières applications wpf avec lesquelles j'ai travaillé, et je travaille toujours avec. Si vous souhaitez suivre les meilleures pratiques et tirer le meilleur parti de votre travail wpf, vous devez utiliser un modèle MVVM.

Si vous suivez ce modèle, votre interface graphique ne devrait afficher que les données et les commandes d'appel qui se trouvent dans le modèle approprié. Même les actions telles que les minuteurs rafraîchissant les données devraient être dans le viewmodel. Ensuite, vous aurez une classe de modèle qui fournit la composition des données ainsi que toute validation/contrainte qui doit se produire.

L'idée est d'être aussi générique que possible avec la vue afin que vous puissiez facilement échanger des dictionnaires de ressources, modifier le xaml et avoir un aspect/une sensation différent sans avoir à retester toute votre logique à nouveau. En réponse à votre question fondamentale, à mon humble avis la vue devrait savoir comment visualiser vos données et si vous avez besoin de mettre à jour/modifier le comportement, alors il devrait savoir comment appeler des commandes sur le viewmodel pour le faire pour vous. Toute autre configuration commence à déblayer les lignes entre le View/Viewmodel/Model et fonctionne probablement contre vous.

Espérons que cela aide. Cet article MVVM m'a vraiment aidé:

http://www.codeproject.com/KB/WPF/MVVMQuickTutorial.aspx?msg=3655304#xx3655304xx

2

Vous pouvez la mettre en œuvre de nombreuses façons. WPF ne s'en soucie pas vraiment. Mais il existe de nombreux modèles architecturaux pour la gestion de l'interface utilisateur graphique (GUI). La plupart d'entre eux met aussi peu de code dans les parties GUI que possible. La plupart des modèles, comme MCV/MVP, conviennent à de nombreux kits d'outils GUI. Un modèle conçu spécifiquement pour WPF est MVVM. Pour apprendre MVVM vous pouvez par un livre, google pour cela ou regarder des vidéos en fonction de comment vous aimez apprendre des choses.

0

Votre code GUI (alias votre vue) devrait simplement fournir un moyen d'afficher des données et d'invoquer des fonctionnalités dans votre modèle (ou de voir le modèle si vous en avez besoin).

Si vous le faites correctement, la plupart du temps, votre vue sera purement XAML sans code-behind du tout. Parfois, vous aurez besoin d'un petit code si par exemple vous avez quelques boutons qui interagissent de manière étrange. Dans ces cas, j'encapsule souvent cette fonctionnalité dans un contrôle personnalisé. En outre, si vous le faites correctement, vous aurez généralement du code presque dans vos modèles de vue et de nombreuses vues n'auront pas du tout besoin de modèles de vue.

Pour répondre à vos questions:

  • Si un bouton clic dans la vue devrait afficher un pop-up qui apparaît partout l'objet est visible (les changements d'objet à un nouvel état), les jeux de boutons une propriété du modèle de vue et le modèle affiche le popup lorsque la propriété est vraie. Si un clic de bouton dans la vue ne doit afficher qu'une fenêtre contextuelle dans la vue sur laquelle le bouton a été cliqué, la fenêtre contextuelle doit être définie à l'aide d'un déclencheur d'événement afin qu'elle s'affiche lorsque vous cliquez sur le bouton. Si un clic de bouton dans la vue doit basculer une valeur booléenne, juste un ToggleButton ou l'une de ses sous-classes et le lier à la valeur. Si un clic de bouton dans la vue doit assigner une seule valeur à un seul champ, il doit avoir une commande attachée qui fait exactement cela (par exemple, vous pourriez avoir une commande "SetProperty" avec des paramètres qui indiquent quelle propriété et quelle valeur). Si un clic de bouton dans la vue doit mettre à jour plusieurs valeurs ou le faire de manière complexe, vous devez utiliser un modèle de vue et gérer la complexité à cet endroit.

  • Si un bouton clic doit faire deux choses distinctes (telles que la mise à jour des valeurs et afficher un popup), vous devez implémenter une classe multicommand pour vous permettre d'exprimer la double action en XAML.

  • S'il existe une logique de validation pour vérifier les champs obligatoires manquants, elle doit figurer dans votre modèle lui-même, car le concept de validité est inhérent à cet objet. Une propriété de l'objet de modèle doit indiquer s'il existe des champs manquants.

  • S'il existe une logique de validation pour vérifier les exigences spécifiques à la vue particulière, elle doit figurer dans votre modèle de vue. Là encore, une propriété du modèle de vue est liée par la vue pour afficher la validité et désactiver l'interface utilisateur (comme un bouton de soumission).

  • Votre vue doit jamais gérer un événement Click sauf dans un programme trivial d'une minute. Vous devez utiliser une commande, soit intégrée, soit définie. Pour les cas simples, une commande peut être appelée en utilisant uniquement XAML (par exemple SetProperty ou Paste). Si un code personnalisé est requis pour gérer votre commande, ce code doit figurer dans votre modèle ou votre modèle de vue.

  • Votre vue doit jamais gérer la valeur des événements. Le système de reliure de WPF est très efficace pour les manipuler. Dans les situations où le mécanisme intégré de WPF ne suffit pas, un contrôle personnalisé ou une propriété attachée doit être créé pour gérer le scénario spécifique.