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 :

Problème de databinding


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut Problème de databinding
    Salut!!
    S'il vous plaît j'ai besoin d'aide pour débloquer un binding avec u item de collection.
    Dans mon programme je crée des lignes dynamiquement, et à chaque fois qu'une ligne est créée j'ajoute un item d'une collection
    ensemble
    . La collection en question est une collection de modLigne (structure que j'ai moi-même définie).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Structure modLigne
            Dim ptStart As Point
            Dim ptEnd As Point
            Dim att As Double
        End Structure
    La propriété cible est une propriété de dépendance 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
    Public NotInheritable Class extensions
     
        Public Shared ReadOnly NouvelleProperty As DependencyProperty = DependencyProperty.RegisterAttached("Nouvelle", GetType(Double), GetType(Line), New UIPropertyMetadata(5.5))
     
        Public Shared Function GetNouvelle(ByVal lgn As Line) As Double
            Return DirectCast(lgn.GetValue(NouvelleProperty), Double)
        End Function
     
        Public Shared Sub SetNouvelle(ByVal lgn As Line, ByVal value As Double)
            lgn.SetValue(NouvelleProperty, value)
        End Sub
     
    End Class
    la source est le champ att de l'item considéré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim binding As New Binding
    binding.Source =ensemble.Item(ensemble.Count - 1)
                    binding.Mode = BindingMode.OneWayToSource
                    binding.Path = New PropertyPath("att")
                    binding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit
                    nligne.SetBinding(extensions.NouvelleProperty, binding)
    Le problème dont il est question ici est que lorsque la cible est modifiée, la source garde toujours la valeur par défaut de la propriété de dépendance de la ligne.Pourtant je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nligne.GetBindingExpression(extensions.NouvelleProperty).UpdateSource()
    Merci de votre aide

  2. #2
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    essaie avec une classe au lieu d'une structure. Quand tu définis ton binding, il copie ton item champ par champ au lieu de passer sa référence à la propriété "Source" du binding. Pour que ça marche il lui faut un type référence, donc une classe.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    En effet tu as raison, avec une classe y'a plus de souci.
    Jje pousse le bouton un peu plus loin, mais je crois que je reste dans le cadre de cette discussion en demandant comment faire pour lier la ligne avec un item de ma collection de telle sorte que quand la ligne est supprimée, l'item le soit aussi dans la collection.

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Là, ça dépend vraiment du reste de l'interface. Comment sont créées les lignes ? Datatemplates ? Dans le code behind sur des évènements I/O utilisateur ? Que représentent-elles exactement, etc... Si une ligne = un élément de la collection, elles sont peut-être enfants d'un ItemsControl (ListBox, ListView...) ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    Mes lignes sont créées sur des événements IO de l'utilisateur. A chaque ligne créée je la dessine sur l'interface et lui associe un élément de la collection, de telle sorte qu'à la fin la collection contient toutes les lignes créées.

    Je peux supprimer une ligne de l'interface par code-behind et je voudrais en même temps supprimer de la collection l'item correspondant à la ligne supprimée.
    Je sais pas si c'est ma préoccupation est déjà claire

  6. #6
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Es-ce que le binding en mode TwoWay ne fonctionnerait pas ?

  7. #7
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    Je fais déjà du binding OneWayToSource. Les modifications des propriétés source dépendent exclusivement d'un changement des propriétés cibles. Donc le TwoWay,je vois pas trop comment vu que je ne modifie pas explicitement la source.

  8. #8
    Membre confirmé
    Inscrit en
    Août 2009
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 143
    Par défaut
    Dites, vous pensez que ce serait possible à partir de chacune de mes lignes de remonter à l'objet source et ainsi le supprimer de la collection?
    ça m'aiderait bien. Quelqu'un sait-il comment ça se fait?
    Merci d'avance.

Discussions similaires

  1. ListView DropDownList et problème de databinding
    Par neo.51 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 15/04/2008, 17h17
  2. Problème avec DataBinding
    Par Steven62 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 30/03/2008, 21h00
  3. Problème de DataBind() sur des DropDownList
    Par getz85 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 28/02/2008, 15h31
  4. Réponses: 1
    Dernier message: 19/02/2008, 14h55
  5. Réponses: 10
    Dernier message: 15/12/2007, 10h14

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