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 :

Modifier stackpanel lorsque le DataContext est modifé


Sujet :

Silverlight

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Points : 420
    Points
    420
    Par défaut Modifier stackpanel lorsque le DataContext est modifé
    Bonjour,
    je suis face à un problème assez génant.

    Lorsque le DataContext (ObservableCollection<Fruit>) de mon Usercontrol est modifié, je souhaite que mon stackpanel horizontal modifie ses "children".

    Je ne peux pas utiliser de listbox car je le veux horizontal, et puis je veux que les fruits adaptent leur taille par rapport à leur conteneur qui a une taille fixe. Exemple :
    Si il y a un fruit il fait 100 pixels
    Si il y a 2 fruits, ils feront chacun 50 pixels
    Si il y a 3 fruits, ils feront 33,333 pixels
    etc ...

    Est-ce possible ?
    Sinon y a t'il une autre solution plus propre ?

    Merci d'avance

  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 : 50
    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,

    Pour information pour redéfinir l'orientation en Horizontal d'une ListBox, il suffit juste de redefinir l'ItemsPanel.

    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
    17
     
            <ItemsControl>
     
                <ItemsControl.ItemsPanel>
     
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal" />
                    </ItemsPanelTemplate>
     
                </ItemsControl.ItemsPanel>
     
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                      <!-- Ici tu définis ton template d'élément-->
                     </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
    Pour ton problème, tu peux utiliser un Grid mais cela ne sera pas très pratique si tu veux utiliser du Binding.

    Tu peux aussi développer ton propre Panel (la meilleur solution de loin) afin de le placer dans l'ItemsPanel d'un ListBox ou d'un ItemsControl. Là, le binding fonctionnera parfaitement.

    En espérant t'avoir donné des pistes
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Points : 420
    Points
    420
    Par défaut
    Bonjour, merci pour ta réponse.

    J'ai utilisé un bout de code que j'ai trouvé sur internet qui permet de s'abonner au DataContext Changed. Ainsi, je peux modifier le contenu de mon stackpanel dans mon code Behind.

    Je perds un peu de mon binding mais c'est une solution rapide et efficace

  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 : 50
    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
    L'important est que tu aies réussi à faire ce que tu voulais :-)
    .
    Pas de question technique en MP, merci.
    .
    Un emulator Gameboy Color pour Windows Phone ?
    c'est moi qui l'ai fait

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Julien_G Voir le message
    Bonjour, merci pour ta réponse.

    J'ai utilisé un bout de code que j'ai trouvé sur internet qui permet de s'abonner au DataContext Changed. Ainsi, je peux modifier le contenu de mon stackpanel dans mon code Behind.

    Je perds un peu de mon binding mais c'est une solution rapide et efficace
    Le principe d'un ObservableCollection c'est quand même d'être notifié quand la collection change, donc au lieu de faire un hack pour la DataContextChanged pourquoi tu n'as pas simplement utilisé les events de l'ObservableCollection ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 250
    Points : 420
    Points
    420
    Par défaut
    Car je ne sais pas comment faire à partir du DataContext
    Il aurait fallut que je le cast ? Je crois que j'avais essayé et que je n'y étais pas arrivé.

  7. #7
    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 : 37
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Sinon, tu peux utiliser une ListBox et changer le ItemsPanel en WrapPanel de direction horizontale.

  8. #8
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Julien_G Voir le message
    Car je ne sais pas comment faire à partir du DataContext
    Il aurait fallut que je le cast ? Je crois que j'avais essayé et que je n'y étais pas arrivé.
    Non il fallait que tu récupères l'ItemsSource et que tu le casts en ObservableCollection.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  9. #9
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Tu peux aussi utiliser un viewbox : les children s'adapteront à la taille du viewbox.
    Sinon, effectivement une listbox peut être horizontale.

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

Discussions similaires

  1. Mise à jour de la vue lorsque le model est modifié
    Par kespy13 dans le forum AngularJS
    Réponses: 11
    Dernier message: 02/04/2015, 13h57
  2. [XL-2010] Mettre une date lorsque un champs est modifié
    Par patch2007 dans le forum Excel
    Réponses: 6
    Dernier message: 27/02/2012, 17h25
  3. Réponses: 5
    Dernier message: 16/09/2010, 10h24
  4. Réponses: 2
    Dernier message: 08/06/2010, 01h57

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