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

VB.NET Discussion :

Remplir une listview a partir de control (textbox, calendar, etc) [Débutant]


Sujet :

VB.NET

  1. #21
    Membre actif
    Homme Profil pro
    Autodidacte débutant
    Inscrit en
    Mai 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autodidacte débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 55
    Par défaut
    Bonjour wallace1,

    J'essaye de travailler/comprendre les ObservableCollection.
    L'ajout de données semble fonctionner. En revanche si je change une donnée ou un attribut de cette collection, le changement ne se fait pas.

    J'ai cru comprendre qu'il fallait gérer InNotifyPropertyChanged.

    J'ai bien trouvé le site de microsoft , cependant je ne comprend pas comment l'adapter à ma classe.
    Leur construction de classe est bien loin de la mienne ou inversement

    Voici ma classe pour rappel :

    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
    Public Class Devoir
     
        Property dateDevoir As String
        Property typeDevoir As String
        Property contenuDevoir As String
        Property classeDevoir As String
        Property faitDevoir As Boolean
     
        Public Sub nouveauDevoir(ByVal dateD As String, ByVal typeD As String, ByVal contenuD As String, ByVal classeD As String, ByVal faitD As Boolean)
            dateDevoir = dateD
            typeDevoir = typeD
            contenuDevoir = contenuD
            classeDevoir = classeDevoir
            faitDevoir = faitD
        End Sub
    End Class
    Sur le site de microsoft je trouve le bout de code qui fait mention de cette option :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Property CompanyName() As String 
            Get
                Return Me.companyNameValue
            End Get 
            Set
                If value <> Me.companyNameValue Then
                    Me.companyNameValue = value
                    NotifyPropertyChanged("CompanyName")
                End If
            End Set
        End Property
    Mais je ne comprend pas où ce genre de code s'insère dans ma classe a moi.
    Faut il que je rajoute ce genre de méthode pour chacune de mes propriétés ?

    Merci pour ton aide

    Cordialement

  2. #22
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Dans un 1er temps je t'invite à bien relire mon message #17 qui mentionne que ta classe devoir est erronée car il manque le constructeur !

    Ensuite, il faut bien distinguer 2 choses:

    ---> INotifyPropertyChanged est une interface qui permet d'implémenter le changement de propriétés dans une classe : dans ton cas la classe devoir
    ---> CollectionChanged est un événement de la classe ObservableCollection qui peut être utilisé (au même titre que n'importe quel gestionnaire d'événement : exemple : événement Click de la classe Button, TextChanged de la classe TextBox, etc.......) soit :
    - en déclarant la classe ObservableCollection avec l'attribut WithEvents (ne pas oublier de l'instancier ensuite) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private WithEvents items As New ObservableCollection(Of Personne)
    NB: La signature du gestionnaire d'événement est la suivante (on ne l'invente pas c'est la doc MSDN):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CollectionChangedMethod(sender As Object, e As NotifyCollectionChangedEventArgs) Handles items.CollectionChanged
     
    End Sub
    - en déclarant la classe ObservableCollection sans l'attribut WithEvents (ne pas oublier de l'instancier ensuite) et en t'abonnant à l'événement CollectionChanged :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private items As New ObservableCollection(Of Personne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AddHandler items.CollectionChanged, AddressOf CollectionChangedMethod
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CollectionChangedMethod(sender As Object, e As NotifyCollectionChangedEventArgs)
     
    End Sub
    NB : L'abonnement dynamique ne requiert pas le mot clé : Handles

    En somme si tu veux savoir si un item a été modifié, ajouté, supprimer,..etc.... dans l'instance de ta classe ObservableCollection il faut procéder ainsi (en me basant toujours sur mon projet exemple) :

    ---> Designer :

    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
     
    <Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="32*"/>
                <ColumnDefinition Width="485*"/>
            </Grid.ColumnDefinitions>
            <ListView x:Name="Listview1" HorizontalAlignment="Left" Height="204" Margin="0,73,0,0" VerticalAlignment="Top" Width="450" ItemsSource="{Binding}" Grid.Column="1">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Nom" Width="120" DisplayMemberBinding="{Binding Nom}" />
                        <GridViewColumn Header="Age" Width="50" DisplayMemberBinding="{Binding Age}" />
                    </GridView>
                </ListView.View>
            </ListView>
            <Button x:Name="Button" Content="Button" Grid.Column="1" HorizontalAlignment="Left" Margin="375,33,0,0" VerticalAlignment="Top" Width="75" Height="20"/>
            <TextBox x:Name="TextBox1" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="0,33,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
            <TextBox x:Name="TextBox2" Grid.Column="1" HorizontalAlignment="Left" Height="23" Margin="155,33,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
        </Grid>
    </Window>
    ---> Classe Personne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Class Personne
        Public Property Nom As String
        Public Property Age As Integer
    End Class
    ---> MainWindow :

    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
     
    Imports System.Collections.Specialized
    Imports System.Collections.ObjectModel
     
    Class MainWindow
     
        Private WithEvents items As ObservableCollection(Of Personne)
     
        Sub New()
            InitializeComponent()
            items = New ObservableCollection(Of Personne)
        End Sub
     
        Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click
            If TextBox1.Text <> String.Empty AndAlso Integer.TryParse(TextBox2.Text, 0) Then
                Dim person = New Personne() With { _
               .Nom = TextBox1.Text, _
               .Age = CInt(TextBox2.Text)}
     
                items.Add(person)
     
                Listview1.ItemsSource = Nothing
                Listview1.ItemsSource = items
            End If
        End Sub
     
        Private Sub CollectionChangedMethod(sender As Object, e As NotifyCollectionChangedEventArgs) Handles items.CollectionChanged
            Select Case e.Action
                Case NotifyCollectionChangedAction.Add
                    MsgBox("Added : " & items(e.NewStartingIndex).Nom)
                Case NotifyCollectionChangedAction.Remove
                    MsgBox("Removed : " & items(e.NewStartingIndex).Nom)
                Case NotifyCollectionChangedAction.Move
                    'Moved
                Case NotifyCollectionChangedAction.Replace
                    'Replaced
                Case NotifyCollectionChangedAction.Reset
                    'Reset
            End Select
        End Sub
    End Class
    Il faut te familiariser avec les events et délégués. Dans quel cas et comment créer un gestionnaire .....

    A+

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant] Remplir une listview à partir d'un bouton de recherche
    Par NABZ27 dans le forum C#
    Réponses: 1
    Dernier message: 01/10/2014, 14h50
  2. Remplir une base MySql à partir des textBox
    Par Chevaan dans le forum C#
    Réponses: 7
    Dernier message: 02/03/2012, 18h07
  3. Remplir une listview à partir d'un tableau Array
    Par Gecoo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/04/2010, 17h05
  4. [XL-2007] Remplir une listview à partir d'une feuille de calcul ou de textbox
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/10/2009, 00h43
  5. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 10h48

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