2010-04-06 5 views
0

Je tente d'effectuer un événement CanExecuteChanged personnalisé pour un bouton de commande. A l'intérieur de l'événement CanExecuteChanged, je voudrais faire des choses quand la valeur de canExecute change mais je ne veux pas le faire en implémentant une classe de bouton de commande personnalisée (dérivant de Button et implémentant ICommandSource). Aussi, je ne veux pas faire mes trucs dans la méthode CanExecute.Implémentation d'un événement CanExecuteChanged personnalisé avec des commandes dans WPF

Des idées?

Merci.

Répondre

0

Vous pouvez gérer l'événement CanExecuteChanged de la commande

+0

OK, je suis d'accord mais comment gérer et mettre en œuvre? Je voudrais faire la même chose que les méthodes et Exécuté CanExecute, par exemple: private void CanExecuteChanged (expéditeur d'objet, EventArgs e) { // Faire mes affaires } Mon problème est que je ne sais pas comment pour lier cet événement au bouton de commande. Dans mon XAML je fais:

+0

Qu'est-ce que "MyCommand"? Comment est-ce défini? Et s'il vous plaît, éditez votre réponse pour poster le code: dans les commentaires, c'est illisible –

+0

Désolé, j'ai posté un exemple de ce que je veux faire. Je l'ai posté comme une réponse pour le rendre plus lisible. – user304602

0

Par exemple:

en XAML:

<Page xmlns:local="clr-namespace:MySolution" ....> 
<Page.CommandBindings> 
    <CommandBinding Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}" 
       Executed="MyCmdBinding_Executed" 
       CanExecute="MyCmdBinding_CanExecute"/> 
</Page.CommandBindings> 

    ... 

<Button Command="{x:Static local:MyNameSpace.MyClass.MyRCmd}" ... /> 

    ... 

</Page> 

Et dans le code de la page derrière:

namespace MyNameSpace 
{ 

public partial class MyClass : Page 
{ 

    ... 

    public static RoutedCommand MyRCmd = new RoutedCommand(); 

    public event EventHandler CanExecuteChanged; 

    private void CanExecuteChanged(object sender, EventArgs e) 
    { 
     // Here is my problem: How to say to execute this when CanExecute value is 
     // changing? I would like to execute this on CanExecute value changed. 
     // I think somewhere I can tell compiler the handler for CanExecutedChanged is 
     // this. How to? 
    } 

    private void MyCmdBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
    { 
     // Do my stuff when CanExecute is true 
    } 

    private void MyCmdBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     if (....) 
     { 
      e.CanExecute = true; 
     } 
     else 
     { 
      e.CanExecute = false;     
     } 
    } 

    ... 

} // end class 

} // end namespace 

et mon problème est comment dire compilateur: Hey, sur la valeur CanExecute changé, vous devez appeler et faire le truc dans la méthode CanExecuteChanged.

Merci beaucoup.

Questions connexes