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

Silverlight Discussion :

Réexposition de dépendency properties


Sujet :

Silverlight

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 67
    Par défaut Réexposition de dépendency properties
    Bonjour,

    Je suis en train de développer un user control contenant des contrôles enfants sur lesquels se trouvent de nombreuses propriétés que je souhaiterais mettre à disposition pour l'utilisateur (mais pas toutes).

    Quels sont donc les best practices pour reprendre une dependency property d'un controle enfant et la mettre à disposition sur nouveau user control ?

    S'il faut se retaper une création complète d'une propriété (et je sens que c'est ce qui m'attend) comment effectuer ensuite le binding entre la nouvelle et celle imbriquée ?

    Merci pour vos réponses.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Là, comme ça, je ne vois pas d'autres solutions que de re-créer des Dependency Properties et, sur la callback de notification de changement de valeur, de mettre en place/à jour le binding avec la propriété du contrôle enfant.

    Pas très clean mais au moins, ca marcherait.

  3. #3
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    que je souhaiterais mettre à disposition pour l'utilisateur (mais pas toutes).
    Pareil que Thomas.
    Le "mais pas toutes" ne permet pas de faire autre chose.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 67
    Par défaut
    Merci pour les réponses

    C'est bien ce que je craignais.

    Du coup re-création de toutes les propriétés à mettre à dispo + binding de la propriété enfant sur la nouvelle lors du load... Ca fait quand même un peu bricolage mais ça marche...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 67
    Par défaut
    Bonjour @ tous.

    J'ai un nouveau problème lors du binding 'interne' entre ma nouvelle propriété exposée et mon composant interne.

    Le binding dynamique est effectué sur le Loaded de mon user contrôle et se présente comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
    this.SetBinding(
      CellWidthProperty, 
      new Binding("CellWidth") 
        {  Source = ControleInterne,  Mode = BindingMode.TwoWay  });
    }
    Le problème ici est que j'affecte un binding sur la propriété exposée et non interne. Donc si l'utilisateur décide via le fichier xaml de binder la propriété vers autre chose, le binding interne est détruit.

    Il faut donc que j'effectue le binding sur la propriété du composant sous-jacent mais là je ne vois pas comment la faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ControleInterne.SetBinding(
      CellWidthProperty, 
      new Binding("CellWidth") 
        {  Source = ???,  Mode = BindingMode.TwoWay  });
    Je voudrais que le ??? corresponde à l'instance de mon usercontrol sachant que this ne fonctionne pas...

    Une idée pour faire ceci? Est-il possible de le faire depuis le xaml?

    Merci d'avance pour les réponses

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Si si le this est cense fonctionner.

    Le probleme avec cette methode c'est si tu utilises de la validation les erreurs ne remontent pas jusqu'au controle interne...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 67
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Si si le this est cense fonctionner.

    Le probleme avec cette methode c'est si tu utilises de la validation les erreurs ne remontent pas jusqu'au controle interne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ControleInterne.SetBinding(CellWidthProperty, new Binding("CellWidth") {Source = this,  Mode = BindingMode.TwoWay });
    me donne :

    ControleInterne.CellWidth ne peut pas être défini sur un objet de type (type du controle interne).
    En l'occurence il s'agit d'un diagramme de gannt de chez componentgo. Ce contrôle implément bien la dependency property CellWidth et je ne pige vraiment pas pourquoi il refuse de mettre en place ce binding.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 67
    Par défaut
    J'ai trouvé le problème.

    Mes dependencies (interne et exposée) ont le même nom et le compilo ne prenait pas la bonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ControleInterne.SetBinding
      ( 
      ComponentGo.Windows.Schedulers.Scheduler.CellWidthProperty, 
      new Binding("CellWidth")    {    Source = this, Mode = BindingMode.TwoWay } );
    fonctionne !

    Merci pour les réponses.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/12/2011, 19h50
  2. [Kylix] PB property published?
    Par le_barbu dans le forum EDI
    Réponses: 2
    Dernier message: 23/12/2003, 20h01
  3. [struts] utiliser plusieurs fichiers properties
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 7
    Dernier message: 03/10/2003, 17h02
  4. Published property d'un compo conservées pendant l'exécution
    Par bobby-b dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/09/2003, 10h15
  5. [warning][properties]problème de police introuvable
    Par cyrdec dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 11/04/2003, 17h41

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