MvvMCross lier commande avec le paramètre (dans le code C#)
Comment puis-je lier une commande à un bouton dans le code de MvvMCross (Xamarin.iOS) avec la spécification d'un paramètre de commande?
//command definition
public MvxCommand SaveDealerDataCommand
{
get { return new MvxCommand<bool>(DoSaveDealerDataAction); }
}
public void DoSaveDealerDataAction(bool show)
{
//...
}
//binding
bindingset.Bind(saveButton).To(vm => vm.SaveDealerDataCommand);
Où puis-je spécifier le paramètre (vrai/faux) qui sera transmis à la commande?
Vous devez vous connecter pour publier un commentaire.
Android et iOS boutons n'ont pas
CommandParameter
propriétés de la même manière que Windows n'.Cependant, MvvmCross l'a fait récemment introduire un moyen d'introduire
CommandParameter
liaisons via des Convertisseurs de Valeur - voir http://slodge.blogspot.co.uk/2013/06/commandparameter-binding.htmlCette liaison devrait fonctionner comme:
ou:
Noter que cette
CommandParameter
de liaison n'est pas complètement dans le 3.0.8.1 paquet qui est stable nuget la sortie, donc pour ce faire vous devez soit:Ajouter ce manuel convertisseur de valeurs de l'enregistrement de votre Installation.cs
Ou utiliser l'un des bêta nuget packages téléchargés depuis 3.0.8.1 (set nuget pour inclure prereleases de voir ces paquets).
Ou la construction de la source vous-même
Pour atteindre votre dynamique paramètre de commande à l'aide du texte dans l'une de vos UITextField contrôles, vous pouvez lier le texte à cet objet UITextField à une chaîne de propriété sur vous ViewModel et le code qui s'exécute dans votre bouton de la commande de limite serait en mesure d'accéder à la valeur par l'intermédiaire de cette propriété lorsqu'il exécute.
Dans votre ViewController, quelque chose comme:
Puis, dans votre ViewModel:
Pour passer d'une dynamique des paramètres de commande de la commande dans la vue modèle, vous pouvez créer une nouvelle classe comme ceci
DynamicCommandParameterValueConverter
:La
CustomMvxWrappingCommand
prend unFunc
comme argument, et est plus tard invoqué et est passé dans les commandesCanExecute/Execute
méthode. Voici un extrait de comment faire partie de cette classe pourrait ressembler à:Vous pouvez modifier la
MvxWrappingCommand
classe de Mvx pour mettre en œuvre l'exemple ci-dessus.L'utilisation de tout: