Passer des paramètres à MVVM Commande
Personne ne sait comment passer des paramètres à Command
à l'aide de CommandHandler
? Supposons que je voudrais faire passer la chaîne de valeur codée en dur à partir de XAML. Je sais comment passer de XAML, mais pas comment le gérer dans MVVM code derrière. Le code ci-dessous fonctionne très bien si il n'est pas nécessaire de passer des paramètres.
public ICommand AttachmentChecked
{
get
{
return _attachmentChecked ?? (_attachmentChecked = new CommandHandler(() => ExecuteAttachmentChecked(), CanExecuteAttachmentChecked()));
}
}
private void ExecuteAttachmentChecked()
{
}
private bool CanExecuteAttachmentChecked()
{
return true;
}
CommandHandler:
public class CommandHandler : ICommand
{
private Action _action;
private bool _canExecute;
public CommandHandler(Action action, bool canExecute)
{
_action = action;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
_action();
}
}
OriginalL'auteur lucas | 2016-02-12
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de changer deux choses
OriginalL'auteur Kylo Ren
Vous devez juste écrire votre chaîne en CommandParameter:
et le changement à partir de:
pour permettre à accepter les paramètres:
En supposant que vous utilisez
RelayCommand
en paramètreobj
de la méthodeDoSmth
sera "Bonjour":OriginalL'auteur StepUp
Cela a déjà été répondu, mais vous ne pouvez pas savoir qu'il existe des Cadres de autour pour éviter de code réutilisable liées à des commandes (et INotifyPropertyChanged) dans MVVM.
L'un des plus célèbres est MVVM Light qui va gérer un peu les choses pour vous.
À l'aide de ce cadre, c'est la façon dont vous gérer une commande avec des paramètres :
(Note : Nous allons créer une commande qui a changé le UserControl affichées, comme le UserControl est la "partie principale" de l'application)
1) Dans votre ViewModel, de définir un RelayCommand avec le type de l'argument (dans ce cas, un UserControl)
2) Définir la méthode pour être appliqué à la commande (simplifiée ici)
3) Lier votre commande à la méthode que vous venez de définir
Votre commande est maintenant configuré et prêt à l'emploi dans votre XAML, disons que vous voulez changer de page avec les sélections de menu, par exemple...
4) de Liaison de Commande avec le paramètre de Contrôle (XAML)
Remarque : pageManager est simplement une classe qui initialise toutes mes pages de leurs états par défaut, il y a évidemment une référence dans mon ViewModel.
Espère que cela vous aide à vous ou à quelqu'un en passant par
OriginalL'auteur Lionel Pire
Le paramètre est transmis dans le
ICommand.Execute
méthode, vous avez juste besoin de passer à travers à votre gestionnaire.OriginalL'auteur Eldar Dordzhiev