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 :

[WPF] Synchronisation du binding un peu lente


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Baud10
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Par défaut [WPF] Synchronisation du binding un peu lente
    Bonjour

    J'ai développé un petit usercontrol WPF que j'ai hosté dans une winform (C#4.0). J'ai une liste d'objet bindée sur la listbox de mon usercontrol.

    Sauf que lors que je supprime un élément de ma liste, la répercussion sur ma listbox n'est pas immédiate : d'après mes tests, je dois focus la listbox, scroller assez pour que l'item a supprimer ne soit plus visible, pour forcer une synchronisation du datacontext.

    Je trouve pas ça normal. Comment procéder pour que ma listbox soit immédiatement mise à jour et non pas "quand elle veut" des modifications de ma liste d'objet ?

    PS: Binding mode=OneWay.

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Comment heberges tu ton wpf dans ton winform?
    Les deux pompes à messages ne sont pas les mêmes donc ca peut poser des problèmes

  3. #3
    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
    Tes objets, qui sont dans ta liste, implémente bien INotifyPropertyChanged ?

  4. #4
    Membre confirmé Avatar de Baud10
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Par défaut
    J'ai effectué des modifications depuis ma première version, suite a mes recherches.

    Mon usercontrol binde ma List<MonObjet> dans une ListBox, en utilisant plusieurs property de MonObjet.

    Au début, quand je changeais la valeur d'un membre d'un MonObjet (ce qui provoquait le changement de valeur d'une property bindée), la modification n'était pas répercutée dans la ListBox. J'ai implémenté INotifyPropertyChange dans MonObjet, et maintenant le changement des propriétés est bien répercutée immédiatement.

    Mais c'est pas le cas avec ma collection : lors que je supprime un élément de ma liste, cette suppression ne fait pas supprimer un Item de la ListBox. J'ai donc hébergé ma liste dans une classe perso que j'ai fais dériver de INotifyCollectionChange. Evidemment j'ai modifié le Path de recherche dans l'usercontrol pour qu'il trouve ma nouvelle liste. L'évènement CollectionChange est bien levé lors qu'il y a un ajout ou une suppression d'un élément de ma liste, mais je pense que l'userControl WPF ne s'est pas abonné a cet évènement, et ne s'en sert donc pas.
    D'ailleurs noter que je ne peux notifier que des évènements de type 'Reset', les actions 'Add', 'Remove' et 'Replace' me lance une erreur au moment de lever l'évènement CollectionChange.

    D'après mes recherches, je dois utiliser une ObservableCollection. Son nom me laisse penser qu'elle est read-only ? En tout cas j'ai besoin d'un binding TwoWay...

    Hosting de mon composant:
    1) J'ai ajouté la référence de projet WPF dans mon projet WinForm
    2) Dans le designer de ma From, j'ai drag'n'drop un Host WPF (Interoperabilité WPF).
    3) Dans le designer, j'ai choisi quel UserControl WPF mettre
    4) Dans le OnLoad de ma Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (MonHostComposant.Child as MonUserControlnamespace.MonUserControlWPF).DataContext = superListeAvecCollectionChange;

  5. #5
    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
    En effet une ObervableCollection semble le plus approprié.
    Et elle n'est pas read-only.

  6. #6
    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
    Par défaut
    ObservableCollection est en effet ce qu'il te faut car cette collection implémente déjà INotifyCollectionChanged et INotifyPropertyChanged :
    http://msdn.microsoft.com/fr-fr/libr...8VS.95%29.aspx

    Il y a un exemple d'utilisation dans cette page même d'ailleurs (je te le remet)

  7. #7
    Membre confirmé Avatar de Baud10
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 66
    Par défaut
    Merci ça fonctionne parfaitement (même si je suis déçu de ne pas avoir réussi a le faire marcher avec ma liste implémentant INotifyCollectionChange)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WPF] Faire un Binding du fichier Ressource
    Par UNi[FR] dans le forum C#
    Réponses: 13
    Dernier message: 29/09/2009, 22h37
  2. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51
  3. [WPF DataBinding] Binding un peu compliqué
    Par thanatoster dans le forum Windows Presentation Foundation
    Réponses: 13
    Dernier message: 16/04/2008, 08h21
  4. Ubuntu un peu lent au chargement chez vous aussi ?
    Par elitost dans le forum Ubuntu
    Réponses: 10
    Dernier message: 12/09/2007, 22h45
  5. Programme un peu lent
    Par gege2061 dans le forum GTK+
    Réponses: 4
    Dernier message: 08/07/2004, 17h42

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