IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Problème avec des commandes disables alors qu'elles devraient être enabled ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut Problème avec des commandes disables alors qu'elles devraient être enabled ?
    Bonjour à tous,

    J'utilise les commandes WPF prédéfinies en redéfinissant les handler (Can Execute et Executed) seul problème les commandes ne sont pas enabled à tous les moments où elles devraient l'être et je ne comprend pas pourquoi.

    Quelques bouts de code pour faire plus clair.

    Coté Xaml:
    La définition de ma commande Save: avec comme paramètre le DataContext (qui est mon MenuViewModel):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     <UserControl.CommandBindings>
            <CommandBinding Command="Save" CanExecute="CanSave" Executed="Save"  />
              </UserControl.CommandBindings>
     
    ...
     
    <MenuItem Header="Save" Command="Save" CommandParameter="{Binding}" />

    Coté c#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     private void Save(object sender, ExecutedRoutedEventArgs e)
            {
     
                WriteFile("File.txt");
     
            }
     
            private void CanSave(object sender, CanExecuteRoutedEventArgs e)
            {
                if ((((MenuViewModel)e.Parameter).File != null) && (((MenuViewModel)e.Parameter).File != ""))
                {
                    e.CanExecute = true;
                    e.Handled = true;
                }
            }
    Le problème c'est que je vérifie en débogage que mes conditions sont toutes les deux vraies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((((MenuViewModel)e.Parameter).File != null) && (((MenuViewModel)e.Parameter).File != ""))
    mais la commande reste disabled.

    Quelqu'un y comprendrait quelque choses svp?

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Cela est sans doute dû au fait que le système ne vérifie pas en permanence l'état d'exécutabilité de la commande; il ne le fait que quand cet état a changé.
    Et il sait que cette état a changé quand il en est notifié via l'évènement CanExecuteChanged par exemple.

    Donc il faut que tu fasses en sorte de notifier le système au bon moment; par exemple, si ton VM implémente INotifyPropertyChanged :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    viewModel.PropertyChanged += (vm, e) =>
    {
    	if (e.PropertyName.Equals("File"))
    	{
    		if (this.CanExecuteChanged != null)
    		{
    			this.CanExecuteChanged(this, EventArgs.Empty);
    		}
    	}
    }
    Ce code pouvant se trouver dans le constructeur de la commande.

    Le problème ici est que tu ne construis pas ton ICommand toi-même mais utilise un CommandBinding, donc il faudra adapter même si le principe reste identique.

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    En effectuant le déboguage, j'ai vérifié que le gestionnaire d'évènement CanSave est vérifié en permanence, par contre la commande reste désactivé.
    C'est ce que je n'arrive pas à comprendre
    Je me dis que peu être il faut que je crée mes propres commandes, mais je ne said pas trop comment faire.Et sur le net, il y a tellement de facons que je me sens perdu.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Tu pourrais implémenter ICommand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class SaveCommand : ICommand
    {
    	...
    }
    ...
    this.Save = new SaveCommand(...);

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 28
    Par défaut
    Merci Seriousme,
    Je vais faire mes tests et poster la solution si jamais j'y parviens.

Discussions similaires

  1. Des problèmes avec les commandes système
    Par edwithenwisdom dans le forum Administration
    Réponses: 6
    Dernier message: 02/05/2011, 14h15
  2. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17
  3. Réponses: 5
    Dernier message: 19/08/2004, 11h11
  4. [STRUTS] Problème avec des ActionForm
    Par zarbydigital dans le forum Struts 1
    Réponses: 2
    Dernier message: 29/03/2004, 13h49
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo