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 images à partir d'une source sur base de données


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur applications RFID
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur applications RFID

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut Binding images à partir d'une source sur base de données
    Bonjour à tous,

    Je travail sur un détail dans une de mes applications et ne comprends pas vraiment comment réagit le binding avec les images. J'ai une class Item qui contient une propriété PhotoPath qui est le chemin d'accès à ma photo. Ces informations sont stockés dans une table sur une instance SQL server.

    J'ai une balise dans le XMAL qui permet d'afficher la propriété PhotoPath de mon objet pour que l'utilisateur est une représentation visuelle de celui-ci. Le chemin indiqué est Images/MonImage.png (ou .jpg). Mais je n'arrive pas à afficher l'image. Il faut préciser je pense également que cet objet est intégré à une ListBox permettant d'afficher de multiples objets Item.

    Je vous donne un extrait du XMAL simplifié pour que vous puissiez vous rendre compte de la situation.

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ListBox>
       <ListBox.ItemTemplate>
            <DataTemplate>
                <Image Name="imageItem" Height="100" Width="100" Source="{Binding PhotoPath}" Stretch="None" />
            </DataTemplate>
       </ListBox.ItemTemplate>
    </ListBox>

    Pour finir je précise bien que j'ai défini un datacontext.

    En fait pour simplifier l'affaire, mon problème est d'afficher une image via un binding qui peut être modifiée dynamiquement. En conséquence, si quelqu'un pourrait m'expliquer comment gérer les chemins d'accès aux images svp. J'avoue que je suis un peu désorienté dans la manière dont WPF gère celles-ci avec un binding.

    Merci pour l'aide que vous pourrez m'apporter.

  2. #2
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Bonjour boby

    Pour ton soucis, tu peux passer par une propriété telle que

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public BitmapImage GetMyImage
    {
    get 
    { new BitmapImage(new Uri("tonchemin, UriKind.AbsoluteOrRelative)); 
    }

    Tu le bindes comme tu l'as fais dans ton extrait de code
    En implémentant INotify, le changement se fera automatiquement dans ton IHM lorsque ton chemin changera.

    Sinon tu peux passer par un Converter.
    Voici un exemple

    Bon courage

    @+

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur applications RFID
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur applications RFID

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Bonjour koyot,

    tout d'abord merci! J'ai envie de te répondre que ça marche mais ça ne marche pas tout à fait comme prévu avec ta première technique énoncée.

    Je m'explique. Cela prend en compte le changement dynamique puisque l'image change mais au lieu d'avoir la nouvelle... il n'y a plus rien! Ma question maintenant cela vient-il du format de l'image, de ces dimensions? Si tu veux je peux t'inclure des screenshots si ça peut t'aider à voir plus clair.

    Dernier point les images qui s'affichent sont des images qui avaient été chargées dans l'application comme étant des component. Cela a-t-il une influence?

  4. #4
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Re,

    J'ai du mal à bien comprendre : tu charges par défaut une image et ensuite tu veux quelle change après une action particulière ?

    Tu as vérifié le path que tu mets ?
    Tes images sont en quel format ? Et quand tu dis qu'il n'y a plus rien, c'est à dire ? (finalement je veux bien une capture d'écran )

    Et si tu peux mettre un peu de ton code lors du changement de la propriété GetMyImage...

    @+

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur applications RFID
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur applications RFID

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Ah je pense avoir trouvé une piste de recherche. Je crois ne pas avoir implémenté le INotify...

    Comment cela fonctionne-t-il?

  6. #6
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Re,

    Tu mets le code suivant dans ta ViewModel

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public event PropertyChangedEventHandler PropertyChanged;
            protected void OnPropertyChanged(string propname)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propname));
            }

    en implémentant l'interface INotifyPropertyChanged

    Ensuite sur chacune des propriétés, tu fais un OnPropertyChanged("NomdetaPropriété")

    Ce qui donne par exemple

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected string _str
    public string str
    {
    get {return _str;}
    set { _str = value ; OnPropertyChanged("str");}
    }

    Cet event permet de notifier à tous ceux qui sont abonnés (via le binding) que la source de données à changée et donc qu'il faut rafraichir l'affichage ..

    En espérant t'avoir aider...

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur applications RFID
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur applications RFID

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Koyot,

    voici les screenshots demandés pour répondre à ta question.
    Sinon, les images sont au format .png soit en .jpg.

    Pour finir, tu as bien compris je charge une image par défaut et pour des raisons de personnalisation on peut être amené à changer cette image. Donc lorsque cela est changé dans la bdd il doit y avoir une répercussion sur l'appli.

    Mais comme tu viens de me le demander à propos du bout de code lors du changement de propriété... cela me fait penser que je l'ai pas implémenté donc le soucis doit sans doute venir de là...
    Images attachées Images attachées   

  8. #8
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Pour si tes images préchargées sont de la même extension/taille/format/... il n'y a pas de raison que ça ne marche pas ...

    Essaie avec le INotify ça peut aider

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/06/2009, 11h49
  2. Insérer une photo sur base des donnes
    Par octal2007 dans le forum VB.NET
    Réponses: 9
    Dernier message: 22/04/2008, 14h41
  3. [VB.net 2005] Extraire un binary image à partir d'une base access
    Par WriteLN dans le forum Accès aux données
    Réponses: 1
    Dernier message: 29/01/2007, 09h23
  4. [FLASH 8] Afficher des images à partir d'une base de données
    Par developpeur_mehdi dans le forum Flash
    Réponses: 9
    Dernier message: 15/03/2006, 10h43
  5. afficher une image à partir d'une base de données access
    Par zidenne dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/11/2005, 11h41

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