CanExecute et CanExecuteChanged, je dois mettre en œuvre ces avec un RelayCommand?
Je suis en utilisant MVVM-Lumière et j'ai mon relais de commande fonctionne parfaitement, je viens de lire que je devrait être mise en œuvre CanExecuteChanged
et CanExecute
. Bien que je suis incapable de trouver un bon exemple.
Quelqu'un aurait-il un bon exemple de la façon de les appliquer.
CanExecute doit retourner False quand il ne peut pas être exécuté, mais ne serait pas juste de disbale le bouton ??
Quand dois-je exécuter l' CanExecuteChanged
?
N'importe qui ont des bons exemples d'utilisation de chacun, mon code fonctionne sans mais ce blog post indique que je doit être mise en œuvre de ces éléments.
Je suis un peu confus, comme je l'ai dit, je pensais que j'allais juste lier la Enabled
propriété ou quelque chose à une propriété du ViewModel donc je peux désactiver le bouton ou une commande similaire?
Toute aide dans la compréhension serait vraiment reconnaissant.
MODIFIER
C'est ce que j'ai maintenant... Son travail, mais le bouton n'est pas physiquement HANDICAPÉS uniquement la commande ne s'exécute pas que je suis de retour faux. Je fais appel CanExecuteMe dans le constructeur de la force de la RaiseCanExecuteChanged ...
Cela va dans mon construtor de mon viewmodel
this.Page2Command = new RelayCommand(() => this.GoToPage2(), () => CanExecuteMe);
CanExecuteMe = false;
et voici le reste de mon code, je l'ai pris à partir d'un exemple.
private bool _canIncrement = true;
public bool CanExecuteMe
{
get
{
return _canIncrement;
}
set
{
if (_canIncrement == value)
{
return;
}
_canIncrement = value;
//Update bindings, no broadcast
//RaisePropertyChanged(CanIncrementPropertyName);
Page2Command.RaiseCanExecuteChanged();
}
}
public RelayCommand Page2Command
{
get;
private set;
}
private object GoToPage2()
{
System.Windows.MessageBox.Show("Navigate to Page 2!");
return null;
}
Et voici mon XAML
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="31,77,0,0" x:Name="button1" VerticalAlignment="Top" Width="75" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Page2Command, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
OriginalL'auteur Martin | 2011-05-03
Vous devez vous connecter pour publier un commentaire.
CanExecute est appelée lorsque le Bouton besoins pour déterminer si elle doit être activée ou non.
Le Bouton n'est présent sur la liaison, et chaque fois que l'CanExecuteChanged feux (le Bouton est à l'écoute de cet événement pour sa Commande).
Donc, si le bouton doit être désactivé, vous devriez feu CanExecuteChanged et, lorsque le bouton appels CanExecute, vous devez retourner
false
. C'est la méthode préférée de l'activation/la désactivation d'un bouton lors de l'utilisation de liaisons de commande.Les liaisons de commande vous permettent d'encapsuler tous les boutons de l'logique au sein d'une instance (la Commande). La méthode CanExecute doit interroger l'état actuel de la demande afin de déterminer si le bouton doit être activé ou désactivé. Par cette encapsulation vous réduire le spaghetti code dans votre Modèle de Vue, où ces contrôles sont effectués ici et là et là et j'ai oublié que l'on s'y déroulant.
Ok question de mise à jour, l'espoir qui fait sens
Ok trouvé, il y a une propriété appelée MustToggleIsEnabledValue que je dois définir.. je vais marquer cette question qu'a répondu que cette réponse assez bien répondu à ma question.
vous devez mettre le bit sur MustToggleIsEnabled dans la question edit, je viens de passer une heure à essayer de le comprendre
OriginalL'auteur Will
Vous devriez être très prudent à l'aide de la CanExecute prédicat. Il vérifie à chaque changement de l'INTERFACE utilisateur et pour chaque touche du clavier est entré dans un domaine QUELCONQUE.
Cela peut provoquer des problèmes de performances!
OriginalL'auteur Ole K