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

Silverlight Discussion :

Erreur lors de l'ajout d'un userControl dans un wrappanel


Sujet :

Silverlight

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut Erreur lors de l'ajout d'un userControl dans un wrappanel
    Bonjour,

    Je suis actuellement chargé de remonter des données d'une base de donnée et de les afficher sur une page silverlight.

    J'ai donc choisis de créer un UserControl qui représentera une donnée, avec lequel je remplierai donc un wrappanel.

    Voici le WrapPanel rempli de ces UserControls:




    Mais à l'exécution :



    Cette erreur à l'exécution n'intervient pas toujours directement, mais souvent quand je décide de rafraichir la page (F5) c'est assez aléatoire en faite.

    Merci,

    Guillaume.

  2. #2
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Bonjour,

    Tu peux regarder si cela correspond à ton problème :

    http://forums.silverlight.net/forums...49/395427.aspx

    Sinon pourquoi ne pas passer plutôt par du Binding sur un ItemsControl dont L'itemPanel contient ton WrapPanel ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Parfait, c'était ce problème la.

    Ce que je ne comprend pas c'est qu'il me le faisais pas tout le temps, et toujours sur le même Item.

    Donc il faut bien donner des noms différents pour chaque Items, j'ai fait ça avec la génération d'un Guid pour chaque nom de userCtrl.

    En tout cas, merci

  4. #4
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Non cela ne correspond pas à mon problème, moi c'est lors de l'ajout d'un children au wrappanel que j'ai une erreur parfois, mais c'est aléatoire.
    Désolé mais à part cela je ne vois pas

    Je ne comprend pas trop l'idée du binding, si je met un wrappanel dans l'itemPanel, mon WrapPanel va etre multiplié pour chaque nouvelle entrée de ma collection, non?
    alors que ce que je voudrais, c'est que ça soit mon UserControl qui soit multiplié dans le wrappanel pour chaque nouvelle entrée de ma collection.
    L'ItemsPanel est différent de l'ItemTemplate. Regarde bien l'explication de cette propriété

    Pour toi ça ferait un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ItemsControl ItemsSource="{Binding MaCollection}">
      <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
              <WrapPanel/>
          </ItemsPanelTemplate>
      <ItemsControl.ItemsPanel>
    </ItemsControl>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Merci pour tes autres explication, mais je viens d'éditer mon message précédent :

    Parfait, c'était ce problème la.

    Ce que je ne comprend pas c'est qu'il me le faisais pas tout le temps, et toujours sur le même Item.

    Donc il faut bien donner des noms différents pour chaque Items, j'ai fait ça avec la génération d'un Guid pour chaque nom de userCtrl.

    En tout cas, merci

  6. #6
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Donc il faut bien donner des noms différents pour chaque Items, j'ai fait ça avec la génération d'un Guid pour chaque nom de userCtrl.
    Ta méthode consistant à générer des nom dynamiquement est considéré comme très mauvaise en Silverlight (mais pas forcément d'en d'autre techno).

    Je t'encourage à utilser le Binding de l'ItemTemplate + l'ItemsPanel que je t'ai montré tout à l'heure car cela te permet de gérer les données sans te soucier de sa liaison avec l'objet Physique de l'interface graphique.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    J'ai justement des problèmes de lenteur lorsque j'ajoute 800 userControls dans mon wrapPanel, je parle de lenteur pour la scroll bar du scrollbarviewer dans lequel le wrapPanel est mis.

    Est-ce que le fait d'utiliser le binding pourrait résoudre ceci?

    Merci

  8. #8
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    Non pas dans l'etat actuel des choses.
    Je m'explique

    Ton problème vient du fait que le WrapPanel n'est pas virtualisé et donc la création de 800 usercontrols bien chargé comme les tiens lui pose quelques soucis.

    Tu dois trouver ton bonheur ici mais il en existe d'autre je pense :
    http://virtualwrappanel.codeplex.com/

    Le fonctionnement est toujours le même et utilise le Binding. En gros il affiche juste les usercontrols visibles (et non pas les 800) et via le Binding change leurs informations sans jamais les reconstuire d'ou un gain de performance très élévé.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    D'accord, merci pour ta réponse,

    mais je ne vois pas comment l'utiliser, j'ai bien téléchargé la classe que j'ai ajouté à mon projet, mais lorsque que je compile une fois ma classe ajouté dans le même namespace, il y a plein de choses qu'il n'arrive pas à résoudre.

    Edit: j'ai pris la classe dans le "Source Code" vu que dans "Download" il n'y avait rien

  10. #10
    Membre émérite
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Points : 2 682
    Points
    2 682
    Par défaut
    J'ai pris ce WrapPanel Virtualisé en exemple. je ne l'ai pas testé et donc je ne peux malheureusement pas t'aider.

    Ce lui la à l'air très bien et en plus tout est expliqué (avec exemple) :
    http://blogs.claritycon.com/blogs/lee_roth/default.aspx

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    Je viens de mettre en place cette solution, je ne m'étais pas trop mis au binding, et maintenant je comprend plus ou moins pourquoi ( à moins que ça soit possible à faire en binding aussi )

    Comment faire pour s'abonner à des évènements de chacun de mes usercontrol a partir du control parent?

    Avant c'était simple, a chaque fois que j'en ajoutais un avec un .Add, je m'abonnais à son évènement avant de l'ajouter.

    Ensuite, dans mon usercontrol, j'ai un objet que j'ai appelé "userCourant" dans lequel il y a toutes les propriétés du user associé à ce userControl.
    J'ai fait un accesseur sur cet objet afin de pouvoir mettre à jour plusieurs paramètres du userControl en fonction du userCourant qu'on lui donne. ( avec des images qui changent par exemple)
    Avant, c'était simple aussi, avant de l'ajouter avec le .Add, je lui assignais un userCourant

    Comment faire avec le binding pour assigner un userCourant?

    Merci

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 43
    Points : 26
    Points
    26
    Par défaut
    J'ai trouvé pour m'abonner a partir de la fenêtre parente, c'était dans le XAML qu'il fallait le faire enfaite, manque plus qu'à trouver comment mettre le userCourant.

    Merci

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

Discussions similaires

  1. [TPW] Erreur lors de l'ajout d'un élément dans une liste chaînée triée
    Par sangimed dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 18/01/2013, 21h37
  2. Réponses: 4
    Dernier message: 06/01/2007, 23h11
  3. [INSERT] Erreur lors de l'ajout d'un objet
    Par bouchette63 dans le forum DB2
    Réponses: 3
    Dernier message: 30/08/2006, 09h32
  4. Réponses: 3
    Dernier message: 08/10/2005, 14h57
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

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