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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [WPF] Problème de binding + validation
    Bonjour

    J'ai un problème de binding.

    En suivant un exemple j'ai commencé par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CRReportBO report = new CRReportBO();
    report.pTitle = "test";
    //...
     
    Binding bindingReport = new Binding();
    bindingReport.Source = report;
    bindingReport.Path = new PropertyPath("pTitle");
    re_title.SetBinding(TextBox.TextProperty, bindingReport);
    et dans mon XAML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Name="re_title"/>
    Jusque là, ça fonctionne.

    Puis j'ai vu qu'on pouvait faire cela plus simplement depuis le XAML.

    j'ai donc supprimé le code précédemment écrit, à l'exception de la déclaration de mon objet CRReportBO.

    et dans mon XAML j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <TextBox Name="re_title" Text="{Binding ElementName=report, Path=pTitle}" />
    Mais ça ne fonctionne pas. Qu'ai-je fait de faux ?
    Dernière modification par Invité ; 28/10/2007 à 15h40.

  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
    Il faut que tu déclares, dans les Resources, un ObjectDataProvider dans lequel tu mettras ton CRReportBO.

    Ou alors, il faut que tu définisses, dans le Load, que le DataContext de ta forme et que tu l'assignes à CRReportBO

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ok, merci

    J'ai quelques chose qui s'affiche maintenant.

    Mais j'ai quelques questions.
    J'ai fait :

    XAML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <UserControl.Resources>
        <ObjectDataProvider x:Key="odpObservers" />
    </UserControl.Resources>
     
    ......
     
    <ComboBox Name="re_observer" DataContext="{Binding Source={StaticResource odpObservers}}" ItemsSource="{Binding}" DisplayMemberPath="pName" />
    C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    List<CRObserverBO> obs = CRObserversManager.pInstance.getObservers();
    ObjectDataProvider odpObservers = FindResource("odpObservers") as ObjectDataProvider;
    odpObservers.ObjectInstance = obs;
    Est-ce qu'il est possible de se passer des lignes 2 - 3 du code C# ci-dessus ? En modifiant le ObjectDataProvider du côté XAML par exemple. J'ai vu que ObjectDataProvider dispose d'une propriété ObjectInstance. J'ai essayer de m'en servir en lui donnant mon objet obs mais je dois mal avoir compris sont fonctionnement.

  4. #4
    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
    Oui, normalement, c'est possible comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <UserControl.Resources>
        <ObjectDataProvider x:Key="odpObservers" ObjectInstance={x:Type local:CRObserversManager}" />
    </UserControl.Resources>
    Maintenant, tu passes par un Singleton à priori donc il est fort possible que tu ais besoin également de MethodName

  5. #5
    Invité
    Invité(e)
    Par défaut
    Heu... je comprends plus du tout là.

    Je dois pas lui passer une instance de ma classe à ObjectInstance ?

    dans le cas d'un singleton (à propos, super ton article sur le développement en couches ), comment est-ce que l'odp fait pour récupérer l'instance de ma classe ?

  6. #6
    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
    Me suit trompé, c'est pas ObjectInstance, c'est ObjectType:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <UserControl.Resources>
        <ObjectDataProvider x:Key="odpObservers" ObjectType={x:Type local:CRObserversManager}" />
    </UserControl.Resources>
    ObjectInstance, c'est lorsque tu veux faire référence à une instance d'un objet que tu as déjà instancié: typiquement, c'est un ObjectDataProvider qui fait appel à un autre ObjectDataProvider (via l'ObjectInstance)

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

Discussions similaires

  1. [WPF] Problème de binding avec une classe perso
    Par Invité 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 Invité 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