Comment faire pour activer un Bouton avec sa méthode CanExecute
Je développe une application en WPF utilisant MVVM, mais je suis coincé avec les objets ICommand.
J'ai un windows qui contient des boutons, donc je ne les lient à leurs ICommand dans le code XAML comme ci-dessous:
<Button Command="{Binding DoSomethingCommand}" Content="Do Something" />
Alors, de mon point De vue-modèle de la classe, j'ai écrit ce qui suit:
public class MyViewModel : ObservableObject
{
private bool isDoSomethingButtonEnabled = false;
....
public ICommand DoSomethingCommand
{
get;
private set;
}
....
....
public MyViewModel()
{
DoSomethingCommand = new DelegateCommand<String>(this.OnDoSomething, this.CanDoSomething);
}
private void OnDoSomething(String arg)
{
}
private bool CanDoSomething(String arg)
{
return isDoSomethingButtonEnabled;
}
....
}
Donc, Car j'ai besoin que mon bouton n'est pas activé la première fois, la fenêtre s'ouvre, j'ai mis ma variable isDoSomethingButtonEnabled
à false
. Et cela fonctionne, le bouton est désactivé au début, mais mon problème est que lorsque je change la variable isDoSomethingButtonEnabled
à true
au moment de l'exécution de mon bouton est toujours désactivé.
J'ai même fait quelques tests après la modification de la variable isDoSomethingButtonEnabled
à true
, l'impression du résultat de DoSomethingCommand.CanExecute()
et il montre "vrai"!
alors, que dois-je faire pour activer mon bouton??
Je vous remercie à l'avance
Oui, je le suis. En fait, j'ai à l'utiliser
OriginalL'auteur Dante | 2012-06-06
Vous devez vous connecter pour publier un commentaire.
Il y a un événement appelé CanExecuteChanged sur le
ICommand
interface:Avec le Prisme DelegateCommand vous pouvez déclencher cet événement avec la
RaiseCanExecuteChanged
méthode:CanExecuteChanged
, j'ai besoin d'ajouter une méthode à elle?Vous avez déjà cette méthode, vous avez juste besoin de jeter votre dos
DoSomethingCommand
deICommand
àDelegateCommand<T>
. Dans votre exemple de l'essayer avec((DelegateCommand<string>)DoSomethingCommand).RaiseCanExecuteChanged();
Ou vous pouvez changer le type de
DoSomethingCommand
deICommand
àDelegateCommand<String>
.Je suis aux prises avec le même problème, je me demande comment cela peut être fait avec une zone de texte, où l'RaiseCanExecuteChanged doit être appelée avec chaque frappe de touche dans la zone de texte (après l'événement TextChanged).....
RaiseCanExecuteChanged ne fonctionne pas (ne pas activer ou désactiver le bouton au moment de l'exécution) pour moi.
OriginalL'auteur nemesv