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 :

Multibinding et IMultiValueConverter sur CommandParameter


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 110
    Par défaut Multibinding et IMultiValueConverter sur CommandParameter
    Bonjour à tous,

    voilà le petit soucis que je rencontre, sur un Calendar du framework 4 j'ai attaché une command lors d'un évènement de celui-ci qui est le "SelectedDatesChanged".

    Jusque là aucun problème, tout fonctionne, mais après quelques modifications, il faut que je passe 2 paramètres dans le CommandParameter, je me suis donc penché sur le multibinding ainsi que sur l'interface IMultiValueConverter. J'ai suivis les instructions et cela à l'aire de fonctionné mais seulement au lancement de l'application si bien que lorsque je sélectionne une autre date dans mon Calendar, le binding ne fonctionne pas et garde seulement la valeur au lancement de l'application.

    J'ai peut être oublié un paramètre mais je ne vois pas lequel...

    Comment faire pour que lorsque j'appelle l'évènement SelectedDatesChanged, le converter récupère bien la nouvelle date sélectionné et non celle prise au lancement de l'application car sinon cela ne sert à rien

    Si vous avez une idée je suis preneur, je vous met le code en dessous.

    Code Xaml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <Calendar Name="calendarMonth" Height="Auto" Width="Auto"
                          SelectedDate="{Binding Path=DisplayDate.Date, ElementName=calendarMonth, Mode=OneWay}" IsTodayHighlighted="True"
                          behaviors:EventBehavior.EventName="SelectedDatesChanged"
                          behaviors:EventBehavior.Command="{Binding Path=SelectedChangedDateCommand}" 
                          >
                    <behaviors:EventBehavior.CommandParameter>
                        <MultiBinding Converter="{StaticResource CalendarConvertArg}">
                            <Binding ElementName="calendarMonth" Path="SelectedDate"/>
                            <Binding ElementName="calendarView"/>
                        </MultiBinding>
                    </behaviors:EventBehavior.CommandParameter>
                </Calendar>
    Classe Converter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                DateTime d = (DateTime)values[0];
     
                My.Calendar c = values[1] as My.Calendar;
     
                ArrayList list = new ArrayList() {c, d};
     
                return list;
            }

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    A mon avis ce qu'il se passe c'est que le converter est appelé une seule fois : lorsque la commande est créée et donc il prend les valeurs de l'initialisation pour créer un paramètre "statique".

    Comment tu utilises ces paramètres pour appeler la commande dans ton behavior ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 110
    Par défaut
    Mon behavior me sert juste pour me permettre d'ajouter une command à un évènement, les command sont définie dans mon ViewModel comme n'importe quelles autres command.

    Je m'en sert pour mes combobox et ça fonctionne sans aucun problème, là je pense que le converter ne se déclenche pas au moment de l'évènement sur le contrôle, l'action passe directement à ma command qui prend les paramètres de l'initialisation et non lors du déclenchement de l'évènement.

    Et je ne comprend pas pourquoi

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    A mon avis, le pb vient du fait que tu as un binding sur la propriété SelectedDate de ton Calendar. Or, dans ton Converter, tu set la/les date(s) sélectionnées donc tu écrases le binding qui n'est plus actif.

    Si tu veux que cela fonctionne, il faudrait que ton converter "attaque" la source de ton binding mais, à te relire, y'a un truc qui me choque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Calendar Name="calendarMonth" Height="Auto" Width="Auto"
                          SelectedDate="{Binding Path=DisplayDate.Date, ElementName=calendarMonth, Mode=OneWay}"
    La propriété SelectedDate de ton Calendar est bindée sur la propriété DisplayDate.Date de ce même calendar ????

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 110
    Par défaut
    En fait ca n'a rien à faire là ce binding, je voulais tester quelque chose mais j'ai oublié de le supprimer ^^

    J'ai remarqué quelque chose, quand on définit des paramètres dans le xaml tel que le binding où l'affectation de valeur, ceux-ci sont initialisé dans l'ordre où ils sont déclarer dans le code xaml, si bien qu'actuellement mes command sont déclarés avant mon multibinding donc est-ce que le problème pourrait venir de là ?

  6. #6
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Citation Envoyé par Ornitho76 Voir le message
    J'ai remarqué quelque chose, quand on définit des paramètres dans le xaml tel que le binding où l'affectation de valeur, ceux-ci sont initialisé dans l'ordre où ils sont déclarer dans le code xaml, si bien qu'actuellement mes command sont déclarés avant mon multibinding donc est-ce que le problème pourrait venir de là ?
    C'est pour cela que je te demandais comment tu utilisais le paramètre

    Tu récupères le binding (avec bindingOperations) ou tu les stockes avec leurs valeurs ?

    Mais à mon avis, Thomas t'as déjà donné la réponse gagnante :
    Citation Envoyé par tomleb
    Or, dans ton Converter, tu set la/les date(s) sélectionnées donc tu écrases le binding qui n'est plus actif.

Discussions similaires

  1. [MultiBinding] sur un template
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/12/2012, 09h59
  2. MultiBinding sur la propriété Foreground d'un label
    Par gueulederack dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 19/07/2011, 09h44
  3. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  4. [Kylix] Kylix embarqué sur PDA ?
    Par Anonymous dans le forum NoSQL
    Réponses: 10
    Dernier message: 29/11/2002, 13h59
  5. F.A.Q, Doc, cours, tutoriels sur JBuilder
    Par Ricky81 dans le forum JBuilder
    Réponses: 0
    Dernier message: 14/03/2002, 15h28

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