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 :

Databinding dans un Usercontrol


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Par défaut Databinding dans un Usercontrol
    Bonjour a tous ,
    Je travaille en ce moment sur un user control wpf/C# qui sera utilisé dans une autre projet
    Voici mes différentes classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class MylistBoxItem
        {
           public MylistBoxItem(string a,string b,string c)
           {
               Field1 = a;
               Field2 = b;
               Field3 = c;
     
           }
            public string Field1 { get; set; }
            public string Field2 { get; set; }
            public string Field3 { get; set; }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public   class MyViewModel
        {
            public ObservableCollection<MylistBoxItem> Items { get;   set; }
            public MyViewModel()
              {
                Items = new ObservableCollection<MylistBoxItem>();
                MylistBoxItem i = new MylistBoxItem("A","B","C");            
                MylistBoxItem i1 = new MylistBoxItem("A1", "B1", "C1");
                Items.Add(i1);
                Items.Add(i);
              }
        }

    Ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    <UserControl x:Class="Genesyslab.Desktop.Modules.InteractionExtensionSample.PocMessages.view.MessageView"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="434" d:DesignWidth="749"                            
                 Width="{Binding RelativeSource=
                {RelativeSource FindAncestor,
                AncestorType={x:Type ListView}},
                Path=ActualWidth}"
     
                 Height="{Binding RelativeSource=
                {RelativeSource FindAncestor,
                  AncestorType={x:Type ListView}},
                  Path=ActualHeight}"                           
            >
            <Grid x:Name="LayoutRoot" > 
    <ListView Name="RecordListView" ItemsSource="{Binding Items}" Margin="0,25,0,248">
                <ListView.View>
                    <GridView>
                        <GridView.Columns>
                            <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                            <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                            <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
                        </GridView.Columns>
                    </GridView>
                </ListView.View>
            </ListView>
     
       </Grid>
    </UserControl>
    Et enfin l'initilisation de ma vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public partial class MessageView : UserControl,IMessageView
        {        
            public MessageView(IMessageViewModel messageViewModel)
            {
     
                    InitializeComponent();
                    this.Model = messageViewModel;
                    MyViewModel vm = new MyViewModel();
                    RecordListView.DataContext = vm;                     
                    Width = Double.NaN;
                    Height = Double.NaN;                                  
            }
     
            public IMessageViewModel Model
            {
                get
                {
                    return this.DataContext as IMessageViewModel; ;
                }
                set
                {
                    this.DataContext = value; 
                }
            } 
     
        }
    Mon souci c'est que le listview n'affiche pas les données mais le nom de la classe complete comme ceci:



    Merci d'avance pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    Salut,

    Tu es sûr qu'il faut faire un binding sur la propriété DisplayMemberBinding ? A mon avis ça serait juste "Field1" et pas "{Binding Path=Field1}". Je peux me tromper je n'avais jamais vu cette DependencyProperty avant (je connaissais DisplayMemberPath)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 69
    Par défaut
    Bonjour,
    Je viens de tester avec Field1 et j'ai le meme resultat.
    Le truc c'est que ne comprend pas c'est que quand j'essaye cette config dans une MainWindow cele fonctionne.
    En fait wpf appelle le ToString de ma classe MylistBoxItem car il ne sait pas comment afficher mes données. Or , j'ai bien specifé un DisplayMemberBinding !
    C'est ce que je ne comprend pas.
    Merci pour ton aide !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Par défaut
    J'ai fait un projet avec ton code (en virant ton Model car je ne sais pas à quoi il correspond et comment tu l'as géré de ton côté)

    Ton binding original fonctionne de mon côté

    Je te file le projet que j'ai créé et dis moi si t'as quelque chose de différent ou quelque chose de particulier qu'il faut que je rajoute
    Fichiers attachés Fichiers attachés

  5. #5
    Invité
    Invité(e)
    Par défaut
    Normalement avec DisplayMemberBinding cela devrait marcher. Je ne comprends pas d'où est-ce que peut provenir le problème vu que le code est correct.

    En attendant tu as deux solutions :
    • redéfinir la méthode ToString() dans la classe correspondante
    • passer par la propriété CellTemplate ce qui te pousse à créer un DataTemplate

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2008, 11h31
  2. [C#] SqlConnection dans un UserControl
    Par rohstev dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/09/2006, 13h47
  3. [VB.NET] DataBinding, Repeater et UserControl
    Par Invité dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/08/2006, 00h11
  4. Réponses: 5
    Dernier message: 10/07/2006, 08h23
  5. [VB.Net] Comment utiliser CSS dans un UserControl ?
    Par GEFIRO1 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2006, 09h27

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