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

C# Discussion :

Binding WPF listbox


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut Binding WPF listbox
    Bonjour,

    J'ai un problème de mise à jour d'une listbox.

    J'ai une form contenant une listbox et différents champs lié à celle-ci via un binding.

    Ma listbox est liée via un itemsource sur mon obersablecollectoin et un selecteditem sur mon élément (classe).

    Tout fonctionne parfaitement. Lorsque je sélectionne un élément de ma listbox, mes champs sont mis à jour et lorsque je modifie l'un de mes champs, ma listbox est mise à jour.

    J'ai maintenant créé trois boutons. Ajout, suppression et remise à zéro lié liés avec des command. L'ajout et la suprression fonctionnent parfaitement car je travaille directement avec mon observable collection, mais j'ai un soucis avec mon bouton remise à zéro.
    Dans mon code j'initialise à zéro tous les champs de mon élément (classe). Mes champs wpf sont bien mis à jour, par contre ma listbox ne l'est pas.
    Comment dois-je faire pour mettre également à jour ma listbox et mon observablecollection ?

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

    Merci d'avance.

  2. #2
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 64
    Points : 91
    Points
    91
    Par défaut
    Salut,

    par "champs" tu entends quoi ? D'autres éléments visuels wpf ou des propriétés d'un modèle ?

  3. #3
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2016
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2016
    Messages : 154
    Points : 268
    Points
    268
    Par défaut
    bojour,
    que signifie pour toi Remise à zero ?
    S'il signifie supprimer tout ton observacollection pourqoi ne pas l'adresser directement et mettre à jour par la suite tes champs ?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 62
    Points : 61
    Points
    61
    Par défaut
    Pas toujours évident d'expliquer comme ca.
    J'ai donc créer un mini projet explicatif.

    Code WPF
    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
     
        <Window.DataContext>
            <local:UserViewModel></local:UserViewModel>
        </Window.DataContext>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Button Grid.Row="0" Grid.Column="0" Content="Ajout" Command="{Binding AddUser}"/>
            <Button Grid.Row="0" Grid.Column="1" Content="RAZ" Command="{Binding RazUser}"/>
            <ListBox Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" ItemsSource="{Binding ListUsers}" SelectedItem="{Binding User}">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Label Content="{Binding Name}"/>
                            <Label Content="{Binding LastName}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
     
            <TextBox Grid.Row="1" Grid.Column="1" Height="25" Width="200" Text="{Binding User.Name}"/>
            <TextBox Grid.Row="2" Grid.Column="2" Height="25" Width="200" Text="{Binding User.LastName}"/>
    Code classe UserViewModel
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
        public class UserViewModel : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
     
            public void NotifyPropertyChange([CallerMemberName] string name = "")
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
                }
            }
     
            private ObservableCollection<User> _listUsers;
     
            public ObservableCollection<User> ListUsers
            {
                get
                {
                    return _listUsers;
                }
     
                set
                {
                    if (_listUsers != value)
                    {
                        _listUsers = value;
                        NotifyPropertyChange();
                    }
                }
            }
     
            private User _user;
            public User User
            {
                get
                {
                    return _user;
                }
     
                set
                {
                    if (_user != value)
                    {
                        _user = value;
                        NotifyPropertyChange();
                    }
                }
            }
     
            public void Add()
            {
                User = new User();
                ListUsers.Add(User);
            }
            private ICommand _addUser;
            public ICommand AddUser
            {
                get
                {
                    return _addUser = _addUser ?? new RelayCommand(Add);
                }
     
            }
     
            public void RAZ()
            {
                User.Name = "";
                User.LastName = "";
            }
     
            private ICommand _razUser;
            public ICommand RazUser
            {
                get
                {
                    return _razUser = _razUser=new RelayCommand(RAZ);
                }
     
            }
     
     
            public UserViewModel()
            {
                ListUsers = new ObservableCollection<User>();
                User user = new User();
     
                user.Name = "Name1";
                user.LastName = "LastName1";
                ListUsers.Add(user);
     
                user = new User();
                user.Name = "Name2";
                user.LastName = "LastName2";
                ListUsers.Add(user);
            }
     
        }
    J'ai également une classe User qui est mon Model et la classe RelayCommand pour l'implémentation de ICommand.

    J'ai du mal à implémenter la remise à zéro.
    Les champs de me vue sont bien mis à "" mais ma listbox n'est jamais mise à jour.
    Comment faire ?

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 64
    Points : 91
    Points
    91
    Par défaut
    Je ne comprends toujours pas.
    Sur la méthode RAZ tu ne fais aucune action sur l' observablecollection ; qu'est-ce qui est censé être mis à jour dans ta listbox quand tu fais un RAZ ?
    Et si j'ai suivi, quand tu cliques sur RAZ, les labels contenant le nom et le prénom sont bien mis à string.empty ? donc ça veut dire que ton Model (classe User) implémente aussi INotifyPropertyChanged ? C'est bizarre comme architecture.

Discussions similaires

  1. RichTextBox et Binding - WPF
    Par marma dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 16/05/2008, 14h04
  2. [WPF][ListBox]Type d'elements d'une ListBox est une form?
    Par bakonu dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 18/02/2008, 10h00
  3. [WPF] ListBox : evenement SelectionChanged se déclenche lorsque SelectedItemS change
    Par anisb dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 17/01/2008, 22h29
  4. [WPF] ListBox sélectionner des élément par défaut
    Par JuTs dans le forum Framework .NET
    Réponses: 15
    Dernier message: 27/12/2007, 16h25
  5. [WPF] Listbox personnalisée sur 3 colonnes
    Par UNi[FR] dans le forum C#
    Réponses: 1
    Dernier message: 11/09/2007, 17h02

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