Maison > développement back-end > C++ > Un ICommand ou un RelayCommand générique est-il la meilleure approche pour les commandes MVVM réutilisables ?

Un ICommand ou un RelayCommand générique est-il la meilleure approche pour les commandes MVVM réutilisables ?

Mary-Kate Olsen
Libérer: 2025-01-20 17:30:11
original
212 Les gens l'ont consulté

Is a Generic ICommand or RelayCommand the Best Approach for Reusable MVVM Commands?

Implémenter des commandes dans une structure MVVM réutilisable

Dans les implémentations récentes de MVVM, le besoin de plusieurs commandes est apparu. Pour alléger le processus fastidieux de création d’une seule classe ICommand, une approche alternative a été conçue. Cependant, son efficacité et ses améliorations potentielles restent encore à discuter.

Solution proposée : ICommand générique

Afin d'intégrer la création de commandes, une classe générique ICommand est introduite, utilisant des délégués pour exécuter et implémenter des fonctions exécutables. Dans le constructeur de cette ICommand, deux méthodes déléguées sont affectées. Par la suite, la méthode ICommand appelle la méthode déléguée.

Bien que la fonctionnalité fonctionne, cela soulève la question de savoir si cette approche est cohérente avec les meilleures pratiques ou s'il existe une solution plus adaptée.

Une alternative : RelayCommand

Comme l'a montré Karl Shifflet, une méthode hautement recommandée est RelayCommand. Il définit une opération qui est effectuée lorsqu'elle est appelée.

Exemple d'implémentation de RelayCommand :

<code class="language-csharp">public class RelayCommand : ICommand
{
    private readonly Predicate<object> _canExecute;
    private readonly Action<object> _execute;

    public RelayCommand(Predicate<object> canExecute, Action<object> execute)
    {
        _canExecute = canExecute;
        _execute = execute;
    }

    // ICommand 实现...

}</code>
Copier après la connexion

Cette implémentation simplifie la création de commandes, comme le montre l'exemple suivant :

<code class="language-csharp">public class MyViewModel
{
    public ICommand DoSomethingCommand =>
        new RelayCommand(
            p => this.CanDoSomething(),
            p => this.DoSomeImportantMethod());
}</code>
Copier après la connexion

Autres ressources :

• "Patterns - Applications WPF utilisant le modèle de conception MVVM" de Josh Smith fournit un aperçu plus approfondi de l'approche RelayCommand.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal