Maison > développement back-end > C++ > Comment puis-je créer des implémentations ICommand réutilisables dans le modèle MVVM de WPF ?

Comment puis-je créer des implémentations ICommand réutilisables dans le modèle MVVM de WPF ?

Susan Sarandon
Libérer: 2025-01-20 17:36:17
original
546 Les gens l'ont consulté

How Can I Create Reusable ICommand Implementations in WPF's MVVM Pattern?

Rationalisation de l'implémentation d'ICommand dans le modèle MVVM de WPF

Dans l'architecture Model-View-ViewModel (MVVM) de WPF, l'implémentation fréquente d'ICommand est courante. La création de nombreuses classes ICommand individuelles peut conduire à un code répétitif. Cet article propose une solution pour les implémentations réutilisables d'ICommand afin d'améliorer l'efficacité.

Une approche simple implique une seule classe ICommand exploitant deux méthodes déléguées : une pour Execute et une pour CanExecute. Le constructeur accepte ces délégués, en les invoquant dans les méthodes ICommand.

Cependant, une alternative supérieure, raffinée à partir du concept initial de Karl Shifflet, est le RelayCommand.

Exploiter le RelayCommand

La classe RelayCommand implémente l'interface ICommand, en utilisant Action<T> et Predicate<T> pour Execute et CanExecute respectivement. Cela offre une méthode plus compacte et adaptable pour la mise en œuvre d'ICommand.

<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 implementation
    // ...
}</code>
Copier après la connexion

L'intégration RelayCommand dans les classes ViewModel simplifie l'instanciation d'ICommand.

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

Résumé

Bien qu'une implémentation ICommand personnalisée avec des délégués soit fonctionnelle, le RelayCommand fournit une solution plus élégante et flexible. L'adoption de RelayCommand rationalise considérablement la mise en œuvre d'ICommand dans les projets MVVM.

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