Pourquoi RelayCommand
J'ai été à la programmation d'un lot dans WPF dernièrement, mais mon point de Vue et ViewModel ne sont pas séparés à ce point. Eh bien, c'est que partiellement. Toutes mes liaisons concernées de texte dans les zones de texte, de contenu pour les étiquettes, les listes de composants datagrid, ..., sont réalisées par des propriétés avec un NotifyPropertyChanged événement en eux.
Tous mes événements pour la manipulation de clics sur le bouton ou le texte modifié des choses est à lier les événements. Maintenant, je voulais commencer à travailler avec les commandes et trouvé cet article: http://www.codeproject.com/Articles/126249/MVVM-Pattern-in-WPF-A-Simple-Tutorial-for-Absolute. C'est une explication de comment mettre en place MVVM mais je suis confus avec le RelayCommand
.
À l'emploi que fait-il?
Est-il utilisable pour toutes les commandes dans mon formulaire?
Comment puis-je faire sur le bouton désactiver lorsque (a) certaines zone de texte(es) ne sont pas remplis?
EDIT 1:
Une bonne explication à "Est-il utilisable pour toutes les commandes dans mon formulaire?" est la réponse ici: https://stackoverflow.com/a/22286816/3357699
Voici le code que j'ai pour l'instant: https://stackoverflow.com/a/22289358/3357699
Is it useable for all commands in my form?
- Ce que les commandes que vous faites référence ici?- le
Click
etTextChanged
- Pour
Click
vous pouvez lier directementCommand
DP de bouton pour certainsICommand
dans votre ViewModel. Mais pour lierTextChanged
vous avez besoin d'utiliser l'interactivité des déclencheurs pour lierICommand
dans votre ViewModel. - RelayCommand mettre en œuvre ICommand et vous permet de définir une action qui doit être utilisé pour Exécuter appelé. C'est la façon dont vous finissez par utiliser une classe pour toutes les commandes et que vous venez de changer l'action au lieu de la création de chaque classe pour chaque commande la mise en œuvre de ICommand. Commandant en wpf de travail doit ICommand.
- J'ai essayé quelque chose de moi-même et posté ce que j'ai. Je l'ai eu à travailler, mais ont encore 2 autres questions qui j'aime être la réponse ici, au lieu de faire une nouvelle question.
- a la meilleure explication de pourquoi une telle classe est nécessaire (la première question de l'OP).
Vous devez vous connecter pour publier un commentaire.
Commandes sont utilisées pour séparée de la sémantique et de l'objet qui appelle une commande à partir de la logique qui exécute la commande c'est à dire qu'il sépare composant de l'INTERFACE utilisateur de la logique qui doit être exécutée sur commande d'invocation. Alors, que vous pouvez tester la logique métier séparément à l'aide de cas de test et aussi votre code de l'INTERFACE utilisateur est faiblement couplé à une logique d'entreprise.
Maintenant, cela étant dit, nous allons chercher vos questions une par une:
J'ai ajouté les détails ci-dessus. Espérons qu'il efface l'utilisation de commandes.
Certains contrôles à l'exposé de Commande DependencyProperty comme le Bouton, MenuItem etc. qui ont des valeurs par défaut de l'événement sont enregistrés. Pour le Bouton c'est
Click
événement. Donc, si vous liezICommand
déclaré dans le ViewModel avec Bouton de Commande du DP, il sera appelée chaque fois que le bouton est cliqué.Pour d'autres événements, vous pouvez les lier à l'aide d'
Interactivity triggers
. Reportez-vous à l'exemple de ici comment les utiliser pour se lier àICommand
dans le ViewModel.Le lien que vous avez posté ne fournit pas de terminer la mise en œuvre de
RelayCommand
. Il manque de la surcharge de constructeur pour définirCanExecute
prédicat qui joue un rôle clé dans l'activation/la désactivation de l'INTERFACE de contrôle à laquelle votre commande est relié.Lier des zones de texte avec des propriétés dans le ViewModel et dans
CanExecute
délégué retourne false si l'un des bindings propriété est null ou vide automatiquement désactivé le contrôle de la commande est affectée.La pleine mise en œuvre de
RelayCommand
:MessageBox.Show(parameter)
où parameter vous permettra de passer de l'interface graphique à l'aide deCommandParameter
. Une recherche sur le net, vous trouverez des millions d'échantillons pour que.19:30
il a suggéré de ne pas utiliser le Gestionnaire de commandes.RequerySuggestedPredicate<T>
en faveur deFunc<T, bool>
.L'avantage de l'utilisation de relais de commande est que vous pouvez lier des commandes directement sur le Viewmodel. En utilisant les commandes de façon à vous éviter d'écrire du code dans le code-behind de la vue.
Lors de l'utilisation de relais de commandes, vous devrez fournir deux méthodes. Le premier fournit une valeur si la commande peut être exécutée (par exemple, "CanExecuteSave"), tandis que l'autre sera responsable de l'exécution de la commande ("ExecuteSave").