Premiers pas avec mvvm-light

RelayCommand

Le RelayCommand implémente l’interface ICommand et peut donc être utilisé pour se lier à Commands en XAML (comme la propriété Command de l’élément Button)

Le constructeur prend deux arguments ; le premier est un Action qui sera exécuté si ICommand.Execute est appelé (par exemple, l’utilisateur clique sur le bouton), le second est un Func<bool> qui détermine si l’action peut être exécutée (par défaut à vrai, appelé canExecute dans le paragraphe suivant).

la structure de base est la suivante :

public ICommand MyCommand => new RelayCommand(
    () =>
    {
        //execute action
        Message = "clicked Button";
    },
    () =>
    {
        //return true if button should be enabled or not
        return true;
    }
);

Quelques effets notables :

  • Si canExecute renvoie false, le Button sera désactivé pour l’utilisateur
  • Avant que l’action ne soit réellement exécutée, canExecute sera vérifié à nouveau
  • Vous pouvez appeler MyCommand.RaiseCanExecuteChanged(); pour forcer la réévaluation de canExecute Func

RelayCommand

Le RelayCommand<T> est similaire au RelayCommand, mais permet de passer directement un objet à la commande. Il implémente l’interface ICommand et peut donc être utilisé pour se lier à Commands en XAML (par exemple, en tant que propriété Command de l’élément Button). Vous pouvez ensuite utiliser la propriété CommandParameter pour transmettre l’objet à la commande.

Exemple XAML :

<Button Command="{Binding MyCommand}" CommandParameter="{Binding MyModel}" />

Le constructeur prend deux arguments ; le premier est un Action qui sera exécuté si ICommand.Execute est appelé (par exemple, l’utilisateur clique sur le bouton), le second est un Func<string,bool> qui détermine si l’action peut être exécutée (par défaut à true, appelé canExecute dans le paragraphe suivant). la structure de base est la suivante :

public RelayCommand<string> MyCommand => new RelayCommand<string>(
    obj =>
    {
        //execute action
        Message = obj;
    },
    obj =>
    {
        //return true if button should be enabled or not
        return obj != "allowed";
    }
);

Quelques effets notables :

  • Si canExecute renvoie false, le Button sera désactivé pour l’utilisateur
  • Avant que l’action ne soit réellement exécutée, canExecute sera vérifié à nouveau
  • Vous pouvez appeler MyCommand.RaiseCanExecuteChanged(); pour forcer la réévaluation de canExecute Func

ObjetObservable

La classe ObservableObject contient quelques méthodes utiles pour aider avec le modèle MVVM.

Le RaisePropertyChanged fournit une méthode de compilation sûre pour déclencher des événements de modification de propriété. Il peut être appelé avec

RaisePropertyChanged(() => MyProperty);

La méthode Set peut être utilisée dans le setter de propriété pour définir la nouvelle valeur et déclencher l’événement de modification de propriété (uniquement si un changement s’est produit). Il renvoie “true” si un changement s’est produit et “false” dans le cas contraire. exemple d’utilisation :

private string _myValue;
public string MyValue    
{
    get { return _myValue; }
    set { Set(ref _myValue, value); }
}

AfficherModelBase

ViewModelBase étend ObservableObject et ajoute quelques méthodes utiles pour les modèles de vue.

La propriété IsInDesignMode ou IsInDesignModeStatic permet de déterminer si le code est exécuté en mode design (en Visual Studio Design View) ou non. Les deux propriétés sont exactement les mêmes.