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 :

[WPF] Binding & Type


Sujet :

Windows Presentation Foundation

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut [WPF] Binding & Type
    Bonjour,

    est-il possible de remonter au type de donnée via une instance de "Binding" ?
    Je peux remonter au Nom (B.Path.Path), est il possible de récupérer la classe afin de récupérer le type de PropertyPath par réflexion ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NeoKript Voir le message
    est-il possible de remonter au type de donnée via une instance de "Binding" ?
    Je peux remonter au Nom (B.Path.Path), est il possible de récupérer la classe afin de récupérer le type de PropertyPath par réflexion ?
    Tu peux grâce à la classe BindingExpression. Suppossons que tu ais un TextBox dont la propriété Text est "bindée" à une la propriété Title de la classe Article par exemple.
    Tu auras à faire comme suit
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BindingExpression bindingExpresion = BindingOperations.GetBindingExpression(myTextBox, TextBox.TextProperty);
    Article article = bindingExpression.DataItem as Article;

    Voilà tu peux jouer avec l'objet "bindé" à ton TextBox mais par contre je ne sais pas comment récupérer la propriété (Title dans notre cas) à laquelle est "bindée" la propriété Text de ton TextBox.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Désolé en fait c'est possible en récupérant l'objet Binding et non l'objet BindingExpression comme suit
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Binding binding = BindingOperations.GetBinding(myTextBox, TextBox.TextProperty);
    PropertyPath path = binding.Path;

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Salut et merci pour ta réponse !

    J'ai fait ceci qui est fonctionnel (pour un DataGrid):

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Binding B = ((Binding)this.DataGridColumn.Binding);
                String PropertyName = B.Path.Path;
                Binding Binding = BindingOperations.GetBinding(this.DataGrid, AdvancedDataGrid.ItemsSourceProperty);
                BindingExpression Expression = BindingOperations.GetBindingExpression(this.DataGrid, AdvancedDataGrid.ItemsSourceProperty);
                Type CollectionType = Expression.DataItem.GetType().GetProperty(Binding.Path.Path).PropertyType;
                Type DataType = CollectionType.GetGenericArguments()[0].GetProperty(PropertyName).PropertyType;

    Si il y a plus simple, je suis preneur.

    Merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il faut quand même faire gaffe avec le path vu que j'ai comme l'impression que tu veux récupérer de façon générique le nom de la propriété via le Path. Mais cependant le Path peut contenir autre chose que le nom d'une propriété.
    D'après MSDN :
    • Dans le cas le plus simple, la valeur de la propriété Path correspond au nom de la propriété de l'objet source à utiliser pour la liaison, comme Path=PropertyName.
    • Les sous-propriétés d'une propriété peuvent être spécifiées par une syntaxe semblable à celle utilisée en C#. Par exemple, la clause Path=ShoppingCart.Order affecte à la liaison la valeur de la sous-propriété Order de l'objet ou la propriété ShoppingCart.
    • Pour créer une liaison avec une propriété attachée, placez des parenthèses autour de la propriété attachée. Par exemple, pour créer une liaison avec la propriété attachée DockPanel.Dock, la syntaxe est Path=(DockPanel.Dock).
    • Les indexeurs d'une propriété peuvent être spécifiés dans des crochets qui suivent le nom de la propriété où l'indexeur est appliqué. Par exemple, la clause Path=ShoppingCart[0] affecte à la liaison l'index qui correspond à la manière dont l'indexation interne de votre propriété gère la chaîne littérale "0". Plusieurs indexeurs sont également prises en charge.
    • Vous pouvez combiner des indexeurs et des sous-propriétés dans une clause Path. Par exemple : Path=ShoppingCart.ShippingInfo[MailingAddress,Street].
    • À l'intérieur des indexeurs peuvent figurer plusieurs paramètres d'indexeur séparés par des virgules (,). Vous pouvez spécifier le type de chaque paramètre à l'aide de parenthèses. Par exemple, vous pouvez avoir Path="[(sys:Int32)42,(sys:Int32)24]", où sys est mappé à l'espace de noms System.
    • Lorsque la source est une vue de collection, l'élément actuel peut être spécifié avec une barre oblique (/). Par exemple, la clause Path=/ affecte à la liaison l'élément actuel dans la vue. Lorsque la source est une collection, cette syntaxe spécifie l'élément actuel de la vue de collection par défaut.
    • Les noms de propriété et les barres obliques peuvent être combinés pour parcourir les propriétés qui constituent des collections. Par exemple, Path=/Offices/ManagerName spécifie l'élément actuel de la collection de sources, contenant une propriété Offices qui est également une collection. Son élément actuel est un objet qui contient une propriété ManagerName.
    • Un Path incluant un point (.) peut également être utilisé pour effectuer une liaison vers la source actuelle. Par exemple, Text="{Binding}" est équivalent à Text="{Binding Path=.}".
    ça donne un peu la migraine non ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Points : 407
    Points
    407
    Par défaut
    Oui j'avoue !

    Dans ce projet la propriété ItemSource de mes DataGrid sera toujours bindé sur une ObservableCollection<X> d'un ViewModel, donc ça passera toujours. Je vais quand même faire les vérifications sur les Binding au cas ou !

    Merci pour ton aide.

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

Discussions similaires

  1. [WPF] Binding et type custom
    Par sehshe dans le forum Framework .NET
    Réponses: 6
    Dernier message: 09/01/2008, 10h19
  2. wpf binding avec un dataset sans listbox
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 25/12/2007, 19h09
  3. [WPF][Binding] Comment binder un fichier XML sur un treeview?
    Par bakonu dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 26/11/2007, 17h09
  4. [WPF] Binding sur app.config
    Par despeludo dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/10/2007, 22h56
  5. Réponses: 2
    Dernier message: 12/12/2006, 22h14

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