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 définition d'un Binding


Sujet :

Windows Presentation Foundation

  1. #21
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Je viens de tester ta solution, mais là :
    • j'ai le même problème qu'avant
    • quand je fais la manip : entrée d'un code postal, choix d'une ville, fermeture window, réouverture, sélection du membre en question : plus rien n'est sélectionné (alors que c'était bien le cas avant)

    Ce qui m'échappe, c'est que ça fonctionne très bien tant que je ne sélectionne pas un autre membre de ma listbox : l'information est, à ce moment-là, bien enregistré (comme décrit dans "Un pas vers la lumière...")
    Curieux tout de même ?

  2. #22
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut Autre test
    Je viens de faire le test suivant :
    Sur le SelectionChanged de ma listbox, j'affiche une msgbox m'indiquant : monMembre.Ville.ID, monMembre.Ville.Nom et monMembre.Ville.CodePostal.
    Résultat => monMembre.Ville.ID est vide (les 2 autres propriétés sont correctes).
    Alors que ce même ID est bien renseigné si je ne sélectionne aucun autre membre et que je quitte simplement la window...

  3. #23
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut Méga Oooops !!!
    Le problème est enfin résolu. Cela ne venait pas de mon binding au niveau du xaml. Je viens de me rendre compte que j'avais écrit dans le code behind ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If txtCodePostal.Text.Length < 5 Then
                cboVille.ItemsSource = Nothing
                cboVille.IsDropDownOpen = False
                cboVille.IsEnabled = False
    End If
    Et là tout s'explique : je sélectionne un membre, je renseigne sa ville. Je sélectionne un autre membre où la ville n'est pas renseignée => la condition est vraie => plus d'itemsSource.
    Cependant, quand je reviens dans le membre modifié, l'itemsSource devrait se mettre à jour, car j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If txtCodePostal.Text.Length = 5 Then
       If MyViewVille.Count > 0 Then
          cboVille.ItemsSource = MyViewVille
          cboVille.IsEnabled = True
          cboVille.IsDropDownOpen = False
          cboVille.Focus()
       End If
    End If
    Pourquoi n'est-ce pas le cas ? Si tomlev a la réponse...
    En tout cas grand merci à tomlev pour s'être trituré les neurones avec moi !

  4. #24
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    Cependant, quand je reviens dans le membre modifié, l'itemsSource devrait se mettre à jour, car j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If txtCodePostal.Text.Length = 5 Then
       If MyViewVille.Count > 0 Then
          cboVille.ItemsSource = MyViewVille
          cboVille.IsEnabled = True
          cboVille.IsDropDownOpen = False
          cboVille.Focus()
       End If
    End If
    Pourquoi n'est-ce pas le cas ? Si tomlev a la réponse...
    De quel type est MyViewVille ? Je suppose que c'est une CollectionView ? Pour que ça se mette à jour, il faut redéfinir le filtre pour forcer le rafraichissement. Tu peux aussi essayer d'appeler Refresh dessus, mais dans certains cas ça ne fonctionne pas, je sais pas trop pourquoi...

  5. #25
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    OK. MyViewVille est bien une CollectionView. J'essaierai ta solution. Merci.

  6. #26
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut Aie...
    Je me suis réjouis trop vite. Alors en fait, en naviguant plusieurs fois entre les membres de ma listbox, le problème réapparaît !
    Je pense qu'il s'agit, comme tu me l'as indiqué tomlev, du problème de rafraîchissement du filtre. Voici le code que j'ai rajouté sur le SelectionChanged de ma listbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub lstMembres_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles lstMembres.SelectionChanged
            If txtCodePostal.Text.Length = 5 Then
                MyViewVille.Filter = Nothing
                MyVilleFiltre = New Filtres.VilleByCPFiltre(txtCodePostal.Text)
                MyViewVille.Filter = New Predicate(Of Object)(AddressOf MyVilleFiltre.FilterItem)
                MyViewVille.SortDescriptions.Add(New SortDescription("Nom", ListSortDirection.Ascending))
            End If
     
    End Sub
    Problème : à chaque changement de sélection, l'UI se fige pendant de trèèès longues minutes avant de rendre la main.
    Comment faire ?

    P.S : pour info, à ce moment-là, j'ai le taux d'occupation du processeur qui grimpe à 100% !! Alors que ce code est le même qui figure dans le txtCodePostal.TextChanged et qui ne provoque absolument aucun ralentissement...

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    A te lire, je dirais que ton code part dans une boucle infinie mais là, comme cela, je ne vois pas trop la raison...

  8. #28
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Une boucle infinie ? Je ne vois pas trop où non plus. Par contre, en mettant MyViewVille.Filter = Nothing, l'ItemsSource de la combo ville étant toujours sur MyViewVille, cela veut dire qu'il la remplit donc avec la liste complète de toutes les villes de France => c'est peut-être la cause du ralentissement.
    J'ai donc modifié le code comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub lstMembres_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles lstMembres.SelectionChanged
     
            cboVille.ItemsSource = Nothing
            MyViewVille.Filter = Nothing
            If txtCodePostal.Text.Length = 5 Then
                MyVilleFiltre = New Filtres.VilleByCPFiltre(txtCodePostal.Text)
                MyViewVille.Filter = New Predicate(Of Object)(AddressOf MyVilleFiltre.FilterItem)
                MyViewVille.SortDescriptions.Add(New SortDescription("Nom", ListSortDirection.Ascending))
                cboVille.ItemsSource = MyViewVille
            End If
     
        End Sub
    Mais le ralentissement est le même, et je perds également la sélection de la ville effectuée...

  9. #29
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    J'ai viré le code précédent dans le SelectionChanged et remplacé par MyViewVille.Refresh() ; ça marche dans un premier temps mais après quelques clics sur les différents membres, je finis par perdre de nouveau la ville sélectionnée...

  10. #30
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Après quelques réflexions, en fait, le problème n'est même pas la CollectionView : lorsque je saisis un code postal pour chacun des membres et que je passe de l'un à l'autre, la CollectionView est rafraîchie comme il faut et la combo ville contient bien la bonne liste de villes - et ce, sans ralentissement. Ce qui cloche, c'est ce !*?%?! de SelectedItem : au bout de quelques sélections successives, la combo ville "perd" cet élément et rien n'est sélectionné.
    Le problème vient donc d'ailleurs, mais d'où ...?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    au bout de quelques sélections successives, la combo ville "perd" cet élément et rien n'est sélectionné.
    Un peu comme si tu testais trop vite les différents choix de ta combo ? vraiment étrange....

  12. #32
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    A ce niveau là (2 jours que t'es sur ce problème de binding et plus de 30 messages plus tard) je suis d'avis que tu mettes un projet exemple. Il y aura bien une âme charitable pour ce pencher sur ton problème
    Parce que là c'est assez difficile à suivre.

  13. #33
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    J'ai trouvé... d'où vient le problème mais je ne sais pas comment le résoudre.
    Voici les nouveaux tests que j'ai faits :
    à côté de ma listbox, j'ai créé un textblock qui m'affiche à chaque SelectionChanged : membre.Ville.ID ; membre.Ville.Nom ; membre.Ville.CodePostal.
    Voici ce qui se passe :
    • Si je définis la ville d'un seul membre (les autres membres n'ont donc pas de ville) => je peux passer indéfiniment d'un membre à l'autre, la sélection de la ville reste OK à chaque fois que je reviens sur ce membre ; les 3 propriétés contiennent bien les données attendues.
    • Si je définis la ville d'un 2e membre ET que je sélectionne en boucle d'autres membres n'ayant pas de ville définie => même chose : lorsque je reviens sur ce membre, la ville sélectionnée est OK.

    MAIS
    • Si je sélectionne un membre dont la ville a été définie, puis un autre membre dont la ville a été définie, tout d'un coup, je perds la sélection, et pour cause : la propriété membre.Ville.ID est tout d'un coup vide ! La valeur a été perdue en cours de route mais pour quelle raison ?

    Alors : est-ce que je perds la sélection parce que je perds la propriété ID OU est-ce que je perds la propriété ID parce que la sélection est perdue (à mon avis, c'est plutôt ça) ?

  14. #34
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Joindre un projet de test, je veux bien, mais ça va pas être facile : mon projet fait appel à une base de données, le transmettre tel quel => impossible ; créer un projet test contenant le strict minimum pour décrire le problème serait beaucoup trop long...

  15. #35
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par jacquesprogram Voir le message
    créer un projet test contenant le strict minimum pour décrire le problème serait beaucoup trop long...
    Vu le temps que tu as déjà passé sur ce problème, ça vaut peut-être le coup...

  16. #36
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    plutôt que de coller une base tu fait une DAL qui rempli une classe
    ca sera plus simple
    moi aussi ca m'intéresse de voir ton projet
    sinon fait un exemple complétement déconnecté
    je te rappel que tu peux sauver un dataset en xml et le recharger

  17. #37
    Membre habitué Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 183
    Points
    183
    Par défaut
    Juste une idée comme ça, tu as essayé de changer la valeur de la propriété IsSynchronizedWithCurrentItem sur ta combo ? Parce que le changement de sélection comme ça, ça ressemble un peu au genre de soucis qu'on peut avoir avec la valeur par défaut.

  18. #38
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Merci Thrud, j'avais pas pensé à ça. Alors j'ai mis IsSynchronizedWithCurrentItem à True et là encore une chose curieuse : au fil des changements de sélection, je perds le code postal : tous les membres se retrouvent au bout d'un moment avec le même code postal ; par contre la combo affiche toujours un item (chose qui n'était pas le cas avant), même si ce n'est pas le bon.
    Je suis en train de créer le projet de test. Je le poste dans la soirée, dès qu'il est prêt.

  19. #39
    Membre actif
    Profil pro
    Inscrit en
    Août 2006
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 582
    Points : 265
    Points
    265
    Par défaut
    Ca y est. Vous trouverez ci-joint le projet de test (c'est du VB).
    Lancez-le : observez le comportement étrange.
    Supprimez le IsSynchronizedWithCurrentItem de la combobox Ville et observez à nouveau l'étrange comportement.
    Voilà. Si quelqu'un a une explication/solution...

  20. #40
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Bon, comme je le disais, il fallait enlever le binding sur SelectedValue (et le SelectedValuePath ne sert donc à rien) parce que ça entre en conflit avec le binding sur SelectedItem. J'ai aussi mis en OneWay le binding de la TextBox sur le code postal : s'il est en TwoWay et qu'une ville est sélectionnée, ça change le code postal de la ville...

    Avec ces 2 modifs, ça marche bien

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 4 PremièrePremière 1234 DernièreDernière

Discussions similaires

  1. Problème définition nouveau projet GTK
    Par Clopinet85 dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 06/05/2013, 17h26
  2. [WPF]Problème d'update de binding
    Par guitoux1 dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 12/06/2007, 17h42
  3. problème de récursivité avec .bind
    Par polo42 dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/04/2007, 18h52
  4. Problème définition constructeur
    Par bugland dans le forum Langage
    Réponses: 11
    Dernier message: 12/02/2007, 14h34
  5. problème définition alias
    Par julien.63 dans le forum Apache
    Réponses: 2
    Dernier message: 26/10/2006, 17h41

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