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 :

Binding et Dependency Property..


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut Binding et Dependency Property..
    J'ai un soucis de bind que je ne comprend pas...
    J'ai un controle ou j'expose une propriete "ObjetSelectionne", propriété qui change lorsque le selecteditem change dans un listview intégré à mon controle

    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
     
     
    public static readonly DependencyProperty ObjetSelectionneProperty = DependencyProperty.Register("ObjetSelectionne", typeof(Objet), typeof(UC));
    		public Objet ObjetSelectionne
    		{
    			get
    			{
    				return (Objet)GetValue(ObjetSelectionneProperty);
    			}
    			set
    			{
    				SetValue(ObjetSelectionneProperty, value);
    				OnObjetChanged();
    			}
    		}
     
    		protected virtual void OnObjetSelected()
    		{
    			OnPropertyChanged(new DependencyPropertyChangedEventArgs(ObjetSelectionneProperty, Objet, Objet));
    		}
     
    		private void lst_objs_SelectionChanged(object sender, SelectionChangedEventArgs e)
    		{
    			OnObjetSelected();
    		}
    J'utilise ce controle dans un autre et je bind la propriété "ObjetSelectionne" avec une autre DependencyProperty d'un autre UC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <uc:UC2 Objet="{Binding ElementName=uc_lst, Path=ObjetSelectionne}"/>
    Rien ne se déclenche apres le OnPropertyChanged de ma propriété ObjetSelectionne, je n'arrive pas à comprendre pourquoi > je ne passe jamais dans le set de la propriété "Objet" de mon UC2

    Si quelqu'un peut m'éclairer...
    Merci d'avance

    PS : je n'ai pas d'erreur de bind dans mon output

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Bonjour,

    Effectivement les appels aux setter ne sont pas effectués. En effet, les accesseurs (getter et setter) que tu créé pour une dependencyProperty ne sont la que pour te faciliter l'accès aux propriétés exposée mais ne sont en aucun cas appelés par le moteur WPF qui se débrouille en interne !

    Par contre si tu veux t'abonner aux changements pour une classe en particulier tu peux utiliser ce bout de code (par exemple à l'initialisation):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
              DependencyPropertyDescriptor prop = DependencyPropertyDescriptor.FromProperty(
                    Window1.ObjetSelectionneProperty,
                    typeof(Window1));
     
    prop.AddValueChanged(this, value_changed);
    Avec cet handler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void value_changed(object sender, EventArgs e)
    {
    //Ma propriété a changé
    }
    Pour plus d'infos sur la méthode regardes mon article intitulé S'abonner aux changements d'une DependencyProperty pour un objet particulier

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    Salut, merci pour m'avoir répondu mais je penses que je me suis mal exprimé: quand je disais "set" je voulais dire que WPF n'appelais jamais le "SetValue" de mon UC2

    Alors j'ai résolu mon problème mais je ne comprends pas exactement se qu'il se passe..
    En fait le bind se met à marcher à partir du moment ou je vais faire un SetValue de ma propriete ObjetSelectionne...
    Le truc c'est que je ne vois pas pourquoi celà ne marche pas en faisant une notification...
    De se que j'avais lu sur les binds WPF c'est qu'il n'était pas question de DependencyProperty et SetValue pour les déclancher mais bien de lever l'evenement PropertyChanged (se que je fait et en plus en passant par la méthode de l'objet FrameworkElement)

  4. #4
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    En WPf tu as deux façon de rendre tes objets Bindable :
    1. En leurs faisant implémenter INotifyPropertyChanged.Dans ce cas tu lève bien l'évenement PropertyChanged à chaque modification pour en informer le moteur de Binding
    2. Ou en utilisant des DependencyProperties (dans un DependencyObject) et dans ce cas la tu changes juste la valeur via les GetValue et le reste se fait tout seul...


    Dans ton cas il faut donc que le corps de ta méthode lst_objs_SelectionChanged fasse ObjetSelectionne
    = objet;

    Sinon si ta liste est une liste d'objet(ton type objet), tu peux surement binder directement le SelecteItem de la liste directement sur la DP ObjetSelectionne

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Par défaut
    ok! C'est la clé qu'il me manquait pour comprendre pourquoi le comportement differait... Du coup le fonctionnement de la notification est completement "overridé" pour une dependencyProperty..

    Merci à toi jmix..

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

Discussions similaires

  1. Dependency property et Binding XAML
    Par PPierre59 dans le forum Silverlight
    Réponses: 3
    Dernier message: 15/06/2010, 23h46
  2. Bind d'une textbox d'une usercontrol sur une Dependency property
    Par Yogy dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 27/04/2010, 05h26
  3. Binding d'une dependency property vers une autre
    Par Pragmateek dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 31/07/2009, 17h28
  4. Style, Triggers, Dependency Properties : pour un UserControl
    Par pascalwick dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 12/02/2009, 09h40
  5. initialisation des dependency property
    Par ikeas dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 13/08/2008, 22h22

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