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 :

Binding ne fonctionne pas avec INotifyProperyChanged sur class derivant de DataTable


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Points : 166
    Points
    166
    Par défaut Binding ne fonctionne pas avec INotifyProperyChanged sur class derivant de DataTable
    Bonjour,

    J'ai une classe Child derivant (inherit) de la classe DataTable et qui implemente l'interface INotifyPropertyChanged.
    Quand je Bind une propriete de ma classe Child a un control, le binding ne semble ne pas marcher.

    si je change ma class Child pour heriter d'une autre class au hazard, le binding fonctionne, donc il semble que ce soit lié a la classe DataTable:

    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
     
    Public Class Form1
     
        Dim c As New child With {.DisplayName = "test"}
     
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            TextBox1.DataBindings.Add(New Binding("Text", c, "DisplayName") With
                                      {.ControlUpdateMode = ControlUpdateMode.OnPropertyChanged,
                                       .DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged})
     
        End Sub
     
    End Class
     
     
    Public Class master
     
     
    End Class
     
    Public Class child
        Inherits master ''<- Binding ne marche pas quand la class est DataTable
        Implements INotifyPropertyChanged
     
        Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
     
        Private _DisplayName As String
        Public Property DisplayName As String
            Get
                Return _DisplayName
            End Get
            Set(value As String)
                _DisplayName = value
                RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("DisplayName"))
            End Set
        End Property
     
    End Class
    Il y a-t-il une restriction sur les classes qui peuvent utiliser le binding?

    Merci de votre aide,
    zebrette

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour les objets "normaux", le mécanisme de binding utilise la réflexion pour accéder aux propriétés. Mais pour la classe DataTable, ça se passe un peu différemment : le binding ne se fait pas directement sur la DataTable, mais sur une DataView (par défaut, la DefaultView de la table). Or la DataView ne tient compte que des colonnes de la table, pas des propriétés supplémentaires que tu as éventuellement ajoutées. De plus, le binding se fait sur une ligne de la table, pas sur la table elle-même.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2010
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2010
    Messages : 132
    Points : 166
    Points
    166
    Par défaut
    hum OK, donc je peux pas vraiment heriter de la classe DataTable et ajouter des propriétés?

    L'autre solution que je vois c'est d'ajouter une propriété de type DataTable a ma classe Child, puis de faire le binding sur la class Child directement quand je veux changer les propriétés ajoutées, et sur Child.Table quand je veux faire le binding sur les données dans la table.

    Pour les objets "normaux"
    C'est quoi le critère de normalité? est ce que ce probleme de binding est commun a tous les objets qui heritent de la meme classe que DataTable? (DataColumn, etc.). Est il possible de savoir a l'avance si un objet a un mecanisme de binding "anormal"?

    Merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par zebrette Voir le message
    hum OK, donc je peux pas vraiment heriter de la classe DataTable et ajouter des propriétés?
    Non. Enfin tu peux, mais tu pourras pas te binder dessus

    Citation Envoyé par zebrette Voir le message
    L'autre solution que je vois c'est d'ajouter une propriété de type DataTable a ma classe Child, puis de faire le binding sur la class Child directement quand je veux changer les propriétés ajoutées, et sur Child.Table quand je veux faire le binding sur les données dans la table.
    Oui tu peux faire ça

    Citation Envoyé par zebrette Voir le message
    C'est quoi le critère de normalité? est ce que ce probleme de binding est commun a tous les objets qui heritent de la meme classe que DataTable? (DataColumn, etc.). Est il possible de savoir a l'avance si un objet a un mecanisme de binding "anormal"?
    En fait toutes les listes se comportent comme DataTable. Le système de binding a une notion d'élément courant, et le binding se fait sur l'élément courant. Les objets "normaux", c'est tout ce qui n'est pas une liste.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/03/2015, 14h33
  2. Réponses: 7
    Dernier message: 11/12/2014, 13h30
  3. Réponses: 2
    Dernier message: 10/03/2009, 19h09
  4. [HTML] Ancre liée à formulaire fonctionne pas avec certains boutons "submit" sur ie6
    Par 12monkeys dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 28/02/2008, 21h30
  5. window.resizeTo ne fonctionne pas avec firefox?
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2005, 15h07

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