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 :

Binding avec une liste de UserControl [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut Binding avec une liste de UserControl
    Bonjour,

    J'ai créé un UserControl, regroupant différents éléments, que j'ai appelé "PropertyLine". Les instances de ce UserControl sont construit au runtime à la demande de l'utilisateur et affiché les uns au dessous des autres.

    Pour l'affichage, j'aimerai idéalement avoir une ObservableCollection des instances des UserControl sur laquelle je viens faire le binding.

    J'ai testé avec un ItemsControl mais cela ne fonctionne pas. Voici les extraits de code :

    XAML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <ItemsControl Grid.Row="3" Name="PropertyItems" ItemsSource="{Binding PropertyLines}">
    </ItemsControl>
    C#
    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
    18
     
    //...
    public ObservableCollection<PropertyLine> PropertyLines;
     
    public MainWindow()
    {
         PropertyLines = new ObservableCollection<PropertyLine>();
         DataContext = this;
         InitializeComponent();
    }
    private void AddPropertyAction( object sender, RoutedEventArgs e )
    {
         PropertyLine newLine = new PropertyLine();
         newLine.suppButton.Click += suppButton_Click;
     
         PropertyLines.Add( newLine );
    }
    //...
    Est ce j'oublie quelque chose ? Est ce que je n'utilise pas le bon système ?

    Merci par avance pour vos conseils !

    Okami

  2. #2
    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
    tu fais dans ton user control
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ObservableCollection<PropertyLine> PropertyLines {get; private set; } = new ObservableCollection<PropertyLine>();
    et dans le code xaml en debut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <usercontrol ... x:name="uc" ...
    puis pour le binding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ItemsControl Grid.Row="3" Name="PropertyItems" ItemsSource="{Binding PropertyLines, ElementName=uc}">
    </ItemsControl>
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Bonjour ikeas,

    Merci pour ta réponse.

    Citation Envoyé par ikeas Voir le message
    tu fais dans ton user control
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ObservableCollection<PropertyLine> PropertyLines {get; private set; } = new ObservableCollection<PropertyLine>();
    La collection se trouve dans ma MainWindow, et non dans mon UserControl. Du coup, je ne comprends pas trop quoi faire.

    Citation Envoyé par ikeas Voir le message
    et dans le code xaml en debut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <usercontrol ... x:name="uc" ...
    puis pour le binding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <ItemsControl Grid.Row="3" Name="PropertyItems" ItemsSource="{Binding PropertyLines, ElementName=uc}">
    </ItemsControl>
    Je l'ai fait, mais rien n'a changé malheureusement. Peut être que "ItemsControl" n'est pas le plus adapté ?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Bon, ben j'ai trouvé... même si je ne comprends pas pourquoi

    Alors déjà, je suis passé à une ListBox. De plus, j'ai viré ItemsSource du XAML pour le mettre dans le Code-Behind, soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public MainWindow()
    {
                DataContext = this;
                InitializeComponent();
     
                PropertyItems.ItemsSource = PropertyLines;
    }
    De cette façon, tout marche correctement. Je peux donc me contenter de gérer ma liste, l'IHM se met à jour en fonction ! Nickel

  5. #5
    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
    ben en general on met les proprietés dans le user control
    par exemple une dependency property qui s'appel item source par exemple et que l'on trouvera dans le usercontrol
    puis on fait le binding comme je te l'ai expliqué ca serait un custom control on ferrait un templatebinding ...
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Bonjour ikeas,

    Merci pour ton explication. Mais dans mon cas, je souhaite afficher une liste de ce usercontrol, ça serait étonnant que cette liste des usercontrol soit contenu dans ces mêmes usercontrol, non ?

    Après, j'avoue que tu utilises quelques termes qui me sont encore obscur Je suis justement en train de rasembler une liste de référence pour monter en compétence sur WPF / MVVM.

  7. #7
    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
    renseigne toi sur les :
    - dependencyproperties
    - attachedproperties
    - custom control

    pour debuter
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Ok ça marche, je regarderai ça de plus près !

    Merci pour les conseils

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

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