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 :

Dependency Property + Setbinding => Aucun effet


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut Dependency Property + Setbinding => Aucun effet
    Bonjour à vous
    Une fois de plus je viens demander votre aide, ça fait un mois que je bloque la dessus en bossant sur d'autres choses à coté.

    Alors j'ai une dependency property dans une DLL et un setbinding faisant appal a un converter de l'autre: En fonction d'un etat je lui retourne une liste de string.

    Avec les points d’arrêt, je vois que ça rentre dans le converter pour prendre la bonne liste, mais je ne rentre pas dans le Set de ma propriété.

    Comme je l'ai construite avec l'aide de la Doc Msdn je ne vois rien qui cloche la dedans. Voici les deux extraits de Code:

    La dependency property de la DLL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Property Source() As List(Of String)
            Get
                Return Ctype(GetValue(SourceProperty), List(Of String))
            End Get
     
            Set(ByVal value As List(Of String))
                SetValue(SourceProperty, value)
                Load()
            End Set
        End Property
     
        Public Shared ReadOnly SourceProperty As DependencyProperty = DependencyProperty.Register("Source", GetType(List(Of String)), GetType(AnimatedView))
    Et voici la déclaration du Binding avec l'utilisation du converter.

    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
     
    ThreadPool.QueueUserWorkItem(New WaitCallback(Function(state As Object)
     
                                                              Dim b As Binding = New Binding("PowerState")
                                                              b.Source = theAero
                                                              b.Converter = New CommandStateConverterAnimeListe
                                                              b.ConverterParameter = GetType(Aerotherme)
     
     
                                                              MyBase.Dispatcher.BeginInvoke(Function()
     
                                                                                                Dim theConfig As ConfigMgt = ConfigMgt.GetInstance()
     
                                                                                                AnimatedAero.SetBinding(AnimatedView.AnimatedView.SourceProperty, b)
     
                                                                                                Return Nothing
                                                                                            End Function)
                                                              Return Nothing
                                                          End Function))
    Donc il entre dans le converter pour saisir le bon truc mais ne rentre pas dans le set de ma proprieté.

    Pas faute d'avoir cherché, mais je dois vraiment avoir loupé un truc...

    Merci beaucoup pour votre aide

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    C'est normal. Le get et set de la DP n'est pas appelée par le framework. Celui-ci appelle un get/set de la DP en direct. C'est pour cela qu'il ne faut jamais mettre quelque chose dans le get/set. Utilise plutôt PropertyChangedCallback, qui est appellée quand la valeur de la DP change.
    (En C#, désole, je ne connais pas VB)
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static readonly DependencyProperty SourceProperty =
                DependencyProperty.Register("Source", typeof(List<string>), typeof(MainWindow), new PropertyMetadata(default(List<string>), DPCallback));
     
    public static void DPCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
         // le code ici
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Février 2011
    Messages : 10
    Par défaut
    Bonjour, désolé du retard et merci de la réponse j'ai eu des soucis de net récemment.

    alors j'ai essayé la manière que tu m'as proposé:

    ca marche une fois à la déclaration du binding mais ensuite le binding ne fonctionne plus. il ne passe plus jamais dans le callback.
    je vais remontrer mon code pour indiquer ou ça en est:


    La property avec le callback:

    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
    Public Property Source() As List(Of String)
            Get
                Return CType(GetValue(SourceProperty), List(Of String))
            End Get
     
            Set(ByVal value As List(Of String))
                SetValue(SourceProperty, value)
                Launch()
            End Set
        End Property
     
        Public Shared ReadOnly SourceProperty As DependencyProperty =
            DependencyProperty.Register("Source", GetType(List(Of String)), GetType(AnimatedView), New FrameworkPropertyMetadata(Nothing, New PropertyChangedCallback(AddressOf DPCallback)))
     
        Public Shared Sub DPCallback(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
            Dim c As AnimatedView = DirectCast(d, AnimatedView)
            c.Source = DirectCast(e.NewValue, List(Of String))
        End Sub
    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 Sub New(ByVal theAero As Aerotherme)
     
     
            server = Server.getInstance()
            Me.theAero = theAero
     
     
            '' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            '' Ajoutez une initialisation quelconque après l appel InitializeComponent().
     
     
     
            ThreadPool.QueueUserWorkItem(New WaitCallback(Function(state As Object)
     
                                                              Dim b As Binding = New Binding("PowerState")
                                                              b.Source = theAero
                                                              b.Converter = New CommandStateConverterAnimeListe()
                                                              b.ConverterParameter = GetType(Aerotherme)
     
     
                                                              MyBase.Dispatcher.BeginInvoke(Function()
     
                                                                                                gbox_aerotherme.Header = theAero.Description
     
                                                                                                AnimatedView1.SetBinding(AnimatedView.AnimatedView.SourceProperty, b)
     
                                                                                                Return Nothing
                                                                                            End Function)
                                                              Return Nothing
                                                          End Function))
     
     
     
     
     
     
        End Sub


    Et donc quand mon "Powerstate" change ensuite le binding ne se fait pas.
    Vous auriez une idée?

    Merci beaucoup en tout cas si j'ai du nouveau je reviens vers vous aussi.

    bonne journée

Discussions similaires

  1. Boutons et sliders n'ont aucun effet :(
    Par ®om dans le forum JSF
    Réponses: 2
    Dernier message: 17/04/2008, 09h56
  2. Réponses: 0
    Dernier message: 16/03/2008, 18h38
  3. ON DELETE RESTRICT -> Aucun effet
    Par irongomme dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/10/2007, 17h32
  4. Color et ParentColor : aucun effet
    Par molini_a dans le forum Composants VCL
    Réponses: 6
    Dernier message: 12/09/2007, 11h54
  5. Requête SQL aucun effet sur la base ?
    Par vain_mich dans le forum Hibernate
    Réponses: 5
    Dernier message: 25/05/2007, 15h42

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