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 :

CheckedListBox et double Binding


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut CheckedListBox et double Binding
    Bonjour,

    j'ai actuellement un problème avec une listBox dans laquelle je voudrait à la fois binder la propriété Selected des ListBoxItem et la propriété IsChecked des chekbox de chaque ligne...

    je pense pas mêtre fais comprendre donc :

    Ma classe pour les objet film à afficher dans la listbox, la propriété Selected doit représenter l'état coché de la ligne
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    public class Film : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string name)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
     
            public Film(string Titre, int dateSortie)
            {
                _titre = Titre;
                _date = dateSortie;
            }
     
            private string _titre;
            public string Titre
            {
                get { return _titre + " " + _selected; }
                set { _titre = value; OnPropertyChanged("Titre"); }
            }
     
            private int _date;
            public int Date
            {
                get { return _date; }
                set { _date = value; OnPropertyChanged("Date"); }
            }
     
            private bool _selected = false;
            public bool Selected
            {
                get { return _selected; }
                set { _selected = value; OnPropertyChanged("Selected"); OnPropertyChanged("Titre"); }
            }
        }
    Le code XAML, la partie commenté correspond à une partie du fonctionnent.
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <ListView Name="_filmsListView" ItemsSource="{Binding Films}" SelectionMode="Multiple">
                <ListView.View>
                    <GridView>
                        <GridViewColumn  Width="150">
                            <GridViewColumn.Header>
                                <GridViewColumnHeader HorizontalContentAlignment="Left">
                                    <CheckBox Name="_headerCheck"
                                              Margin="2,0,0,2"
                                              Content="  Titre des Films"
                                              Click="_headerCheck_Click"/>
                                </GridViewColumnHeader>
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <!--<CheckBox Name="_filmChkBox" Margin="0,4,0,4"
                                              Content="{Binding Path=Titre}"
                                              IsChecked="{Binding Path=IsSelected,
                                        RelativeSource={RelativeSource Mode=FindAncestor,
                                        AncestorType={x:Type ListBoxItem}}}" />-->
     
                                    <ListBoxItem IsSelected="{Binding Path=Selected}">
                                        <CheckBox
                                            Margin="0,4,0,4"
                                            IsChecked="{Binding Path=Selected}"
                                            Content="{Binding Path=Titre}"/>
                                    </ListBoxItem>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
     
                        <GridViewColumn Width="100">
                            <GridViewColumn.Header>
                                <GridViewColumnHeader HorizontalContentAlignment="Left">
                                    Date de sortie
                                </GridViewColumnHeader>
                            </GridViewColumn.Header>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Path=Date}" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
     
                    </GridView>
                </ListView.View>
            </ListView>
    Donc ce que je souhaiterai, ce serait que lorsque je clique sur un item, la propriété Selected du film passe à true, et donc que la CheckBox passe également à true.

    J'espère avoir été clair...

    Merci d'avance

    @ bientot
    Fichiers attachés Fichiers attachés

  2. #2
    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
    Est-ce que les autres binding (Titre, etc.) fonctionnent ?

  3. #3
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    Salut,

    Pour faire simple et propre moi je passerais par mon Objet Film, qui aurait une propriété IsChecked. Le top étant d'avoir un objet du genre ViewModelItemFilm qui contiendrait ton objet métier Film et c'est dans ce ViewModelItem que tu mettrais la propriété IsChecked afin de bien séparé ton IHM de ton métier.
    Ensuite tu bind ta combo sur la liste de ViewModelItemFilm, avec le select sur la propriété IsChecked, et pareil du côté de la ListeBox.

    Voilà, j'espère que c'est assez clair

    ++

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Bonjour et merci de votre attention à mon problème.

    En ce qui concerne le Binding des titres et date de films, ils fonctionnent bien.

    Je vais dans le sens d'une création d'objet ViewModelItemFilm ou kelke chose du genre, mais cela ne résout pas mon probleme.

    En effet, dans mon template, j'ai ajouté une checkBox qui est bien Bindé sur la propriété Selected de ma classe Film, mais pour changer l'état de la coche, je doit soit cliquer sur la coche elle-même, soit cliquer sur le titre de la coche.

    J'aimerai pouvoir agir sur la coche (et la propriété Selected de Film) directement lors de la selection d'une ligne (ListViewItem).
    En clair, lorsque je clique sur une date, cela selectionne la ligne en bleu et coche la CheckBox.

    Le tout avec une ListView en selection multiple...

    J'espère avoir été plus clair,

    Merci pour vos réponses, et merci d'avance pour votre aide !

    @ Bientôt

  5. #5
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    Si j'ai bien compris, quand tu mets à jour ton modèle via la liste, ta checkbox ne se met pas à jour. Si c'est ça, essayes en spécifiant ton binding en mode TwoWay

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 8
    Par défaut
    Bonjour,

    Pour info, j'ai mis un zip dans mon premier post avec le projet dedans.

    Pour le binding de la checkBox, il fonctionne bien, j'ai bien le titre du film qui change lorsque je clique sur la checkBox, mais j'aimerai que cela suive l'etat de la ligne (le ListViewItem).

    J'ai essayer de Bindé la propriété IsChecked de la CheckBox sur la propriété Ancestor Selected du ListViewItem.

    J'aimerai Binder la propriété Selected du ListViewItem sur la propriété Selected de ma class Film, mais je n'ai pas de ListViewItem, je ne sais pas comment accèdé au ListViewItem dans le XAML pour Binder sa propriété.

    J'espère avoir été plus clair, avec mon projet de démos, je pense qu'on ce rend bien compte de ce qui ne va pas, lorsque l'on clique sur une date, je souhaiterai que la checkBox soit cochée.

    Merci de votre aide, @ Bientôt.

  7. #7
    Membre éprouvé

    Étudiant
    Inscrit en
    Août 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2004
    Messages : 108
    Par défaut
    Voici comment binder la propriété IsSelected d'un ListViewItem sur la propriété Selected du Film.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ListView x:Name="_filmsListView" ItemsSource="{Binding Films}" SelectionMode="Multiple" SelectionChanged="_filmsListView_SelectionChanged">
     
                <ListView.Resources>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="IsSelected" Value="{Binding Path=Selected, Mode=TwoWay}" />
                    </Style>
                </ListView.Resources>
    La balise ListBoxItem autour de ta checkbox ne sert pas.

    Sinon, avis personnel, je pense que ce serait mieux de mettre le titre du film dans une autre colonne plutôt que dans le libellé de la CheckBox.

    A+

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

Discussions similaires

  1. Double Binding xaml
    Par Lionhart dans le forum C#
    Réponses: 2
    Dernier message: 18/09/2014, 11h02
  2. Double binding sur objet complex
    Par babass77 dans le forum Flex
    Réponses: 5
    Dernier message: 29/04/2011, 10h08
  3. double binding sur combobox >>> possible?
    Par waspy59 dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 03/11/2009, 23h47
  4. CheckedListBox Binding CheckedItems
    Par adrienfehr dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 03/03/2009, 18h04
  5. Double binding pour un champ de BdD
    Par Paulo2901 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 27/08/2007, 13h33

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