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

Framework .NET Discussion :

[WPF] Problème de binding


Sujet :

Framework .NET

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je tâche de faire ca dès que possible

  2. #22
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Ok, merci

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    En attendant, je suis déjà passé à l'étape suivante : l'affichage des données enregistrées dans un listView/gridView. Jusque-là, pas de problème, j'arrive à récupérer mes données les binder à ma listView.



    Mais je me pose une question. Dans le cas présent j'ai deux tables dans ma base de données : reports et observers

    Et j'ai une relation 1:N entre les deux. Dans pa table reports j'ai donc une clé étrangère sur la table observers . Ainsi, dans mon gridView, dans ma colonne "observer" ce n'est pas son nom qui s'affiche mais son ID. Normal, puisque j'ai seulement récupéré les données provenant de la table reports.

    Je me pose donc la question : Comment vais-je faire pour afficher le nom, et non l'id dans mon gridView. J'envisage deux possibilités :



    1. Ajouter dans mon objet métier CRReportBO une propriété me permettant de récupérer le nom correspondant à l'id de l'observateur.

    2. Récupérer les données provenant de reports et celles de observers, puis essayer de binder tout ça. Je ne sais pas si c'est possible. L'idée serait d'afficher, à la place de l'id de l'observateur, le nom correspondant et provenant des données venant de observers. Je ne sais pas si mes explication sont assez claires, mais est-ce possible ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pour faire ce que tu veux faire, tu dois pouvoir passer par une sous-requête, en SQL.

    PS: Le code dont je te parler (VS 2008 Beta 2) est en PJ
    Fichiers attachés Fichiers attachés

  5. #25
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Pour faire ce que tu veux faire, tu dois pouvoir passer par une sous-requête, en SQL.
    Ok

    Citation Envoyé par Thomas Lebrun Voir le message
    PS: Le code dont je te parler (VS 2008 Beta 2) est en PJ
    Merci.

    Il y a deux problèmes :

    1. Impossible d'ouvrir un projet VS 2008 avec VS 2005. J'ai donc créé un nouveau projet auquel j'ai ajouter te fichier.

    2. VS2005 n'a pas l'air d'aimer cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyItems.Add(new Item() { Name = "Element 1" });
    sur la première { il me dit qu'il attend une )

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Ah bah oui: comme c'est du VS 2008, j'ai utilisé quelques nouveautés de C# 3

    Bon, laisse tomber: tu es arrivé à faire ce que tu voulais et c'était le principal

  7. #27
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Ah bah oui: comme c'est du VS 2008, j'ai utilisé quelques nouveautés de C# 3
    du 3.5 plutôt, non ? Parce que le 3.0 je l'ai et ça fonctionne avec VS 2005

    Citation Envoyé par Thomas Lebrun Voir le message
    Bon, laisse tomber: tu es arrivé à faire ce que tu voulais et c'était le principal
    C'est vrai. Et en plus, je ne sais pas si je vais utiliser cette méthode longtemps, il est possible que j'utilise la classe ErrorProvider de Paul Stovell

    Mais quand quelque chose ne fonctionne pas, j'aime bien comprendre pourquoi


    Bon, je vais cliquer sur

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JuTs Voir le message
    du 3.5 plutôt, non ? Parce que le 3.0 je l'ai et ça fonctionne avec VS 2005
    Non, C# 3: toi, tu dois avoir la CTP de Mai qui ne contient pas toutes les nouveautés

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Je l'ai installé il y a un peu plus d'un mois, je devrais avoir la dernière version non ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Oui mais cela dépend de quelle version tu as installé

    Tu as un lien vers ce que tu as installé ?

  11. #31
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    J'avais déjà .NET 2 installé et j'ai fait une mise à jour par Microsoft Update

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    OK donc c'est .NET 3.0 que tu as installé: C# 3 n'est pas disponible via Windows Update

  13. #33
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Donc si j'ai bien compris ce que j'ai lu ici : http://msdn2.microsoft.com/fr-fr/lib...sz(VS.80).aspx , C# 3 est dans .NET 3.5 . C'est correct ?

    Est-il possible d'utiliser C# 3 depuis VS 2005. Il y a quelques nouveauté que j'ai découvert qui m'intéressent.

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par JuTs Voir le message
    Donc si j'ai bien compris ce que j'ai lu ici : http://msdn2.microsoft.com/fr-fr/lib...sz(VS.80).aspx , C# 3 est dans .NET 3.5 . C'est correct ?
    Oui

    Est-il possible d'utiliser C# 3 depuis VS 2005. Il y a quelques nouveauté que j'ai découvert qui m'intéressent.
    Oui, tu peux installer la CTP de Mai 2006 de LINQ mais cependant, elle ne te donnera pas accès à toutes les nouveautés que tu as lues Pour toutes les avoir, il faut VS 2008

  15. #35
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    ok. bon je crois que je vais laisser C# 3 de côté pour le moment.


    Par contre j'ai un autre souci de binding.

    J'ai mis mes objets CRReportBO dans une liste de type, CRReportsCollection. Elle hérite de ObservableCollection et fourni en plus une propriété qui permet de connaître le rapport actuellement sélectionné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class CRReportsCollection : ObservableCollection<CRReportBO>
    {
    	private CRReportBO current;
     
    	public CRReportBO Current
    	{
    		get { return current; }
    		set { current = value;}
    	}
    }
    J'affiche le contenu de cette collection dans un ListView. Et quand je sélectionne un élément de cette liste, la propriété Curent est modifiée.

    Jusque là, tout va bien.

    Maintenant j'aimerais afficher le détail du rapport dans un autre userControl contenant des textBlock. J'ai donc bindé mes textBlock sur la propriété Current.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataContext = MainWindow.Reports.Current; //Reports est mon objet CRReportsCollection (public static)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <TextBlock x:Name="DetailTitle" Text="{Binding Path=Title, UpdateSourceTrigger=PropertyChanged}" />
    Mais quand je modifie la propriété Current de ma liste (en sélectionnant une autre ligne dans ma ListView) les textBlock ne sont pas mis à jour. Ca ne devrait pas être le cas ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Bizarre, ton DataContext est appliqué à la fenêtre ? Tu as essayé de faire ton binding en utilisant Blend ?

  17. #37
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Bizarre, ton DataContext est appliqué à la fenêtre ?
    En fait je suis dans un userControl.
    Dans le constructeur j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataContext = MainWindow.Reports.Current;
    Citation Envoyé par Thomas Lebrun Voir le message
    Tu as essayé de faire ton binding en utilisant Blend ?
    Non. Par contre j'ai remarqué que si je modifie manuellement le dataContext avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataContext = MainWindow.Reports.Current;
    , la mise à jour se fait

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pas tout ompris là, tu me montres 2 fois la même lignes de code

    Tu veux dire que appelé à nouveau:

    DataContext = MainWindow.Reports.Current;

    arrive à mettre à jour l'interface ?

  19. #39
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Oui, c'est ça.

    Au moment où une ligne est sélectionnée dans ma listView, j'appelle une méthode qui se trouve dans le userControl devant être rafraichi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void refresh()
    {
        DataContext = MainWindow.Reports.Current;
    }
    Et dans ce cas-là, la modification se fait

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Pas très propre tout cela... Je te conseille d'implémenter INotifyPropertyChanged sur ta classe CRReportBO et de voir si cela règle ton pb

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [WPF] Problème de binding avec une classe perso
    Par JuTs dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 12/04/2010, 18h45
  2. Réponses: 0
    Dernier message: 30/06/2009, 21h41
  3. [WPF] Probléme de binding dans un UserControl :(
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 17/07/2008, 15h51
  4. [WPF] Problème de binding
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/02/2008, 14h08
  5. [WPF] Problème de binding entre une SortedList et une ListBox
    Par JuTs dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 10/12/2007, 13h20

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