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

Silverlight Discussion :

DataBinding d'objets imbriqués


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    Par défaut DataBinding d'objets imbriqués
    Bonjour,

    Je débute sur le databinding et j'ai besoin d'accéder à des objets imbriqués qui contiennent plusieurs listes :
    Code c# : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    public class Picture : INotifyPropertyChanged
        {
            #region Members
            private int width { get; set; }
            private int height { get; set; }
            private string filename { get; set; }
            private string extension { get; set; }
            private FileStream stream { get; set; }
            private BitmapImage image;
            public int Width
            {
                get { return width; }
                set
                {
                    width = value;
                    NotifyPropertyChanged("Width");
                }
            }
            public int Height
            {
                get { return height; }
                set
                {
                    height = value;
                    NotifyPropertyChanged("Height");
                }
            }
            public string Filename
            {
                get { return filename; }
                set
                {
                    filename = value;
                    NotifyPropertyChanged("Filename");
                }
            }
            public string Extension
            {
                get { return extension; }
                set
                {
                    Extension = value;
                    NotifyPropertyChanged("Extension");
                }
            }
            public BitmapImage Image
            {
                get { return image; }
                set
                {
                    image = value;
                    NotifyPropertyChanged("Image");
                }
            }
            #endregion
     
            #region Constructors
            //...
            #endregion
     
            #region Methods
            //...
            #endregion
     
            #region INotifyPropertyChanged Members
            //...
            #endregion
        }
        public class PictureGroup : INotifyPropertyChanged
        {
            public ObservableCollection<Picture> pictures { get; set; }
            public PictureGroup() { pictures = new ObservableCollection<Picture>(); }
     
            #region INotifyPropertyChanged Members
            //...
            #endregion
        }
        public class PictureCollection : INotifyPropertyChanged
        {
            public ObservableCollection<PictureGroup> groups { get; set; }
            public PictureCollection() { groups = new ObservableCollection<PictureGroup>(); }
     
            #region INotifyPropertyChanged Members
            //...
            #endregion
        }
    Donc pour résumer au format DTD ça me donne :
    PictureCollection (PictureGroup*)
    PictureGroup (Picture*)
    Quelque part dans le code j'ai aussi :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private PictureCollection data = new PictureCollection();
            public MyConstructor()
            {
                InitializeComponent();
                pictureList2.ItemsSource = data.groups;
            }

    Pour l'affichage, je ne sais pas comment le gérer par contre :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ScrollViewer HorizontalScrollBarVisibility="Auto">
                    <ItemsControl x:Name="pictureList2">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <!-- Affichage d'un groupe d'image par ligne -->
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </ScrollViewer>

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Je ne suis pas sur d'avoir bien compris, mais a priori pourquoi ne pas mettre un secon itemsControl

    Code xml : 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
    <ScrollViewer HorizontalScrollBarVisibility="Auto">
                    <ItemsControl x:Name="pictureList2">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <!-- Affichage d'un groupe d'image par ligne -->
     
    <div style="margin-left:40px"><div style="margin-left:40px"><div style="margin-left:40px"><ItemsControl x:Name="pictureList3" ItemsSource="{Binding pictures}">
       <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
          </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl></div></div></div>                  </StackPanel>
                   </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </ScrollViewer>

    Non testé mais l'idee est peut être la

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    Par défaut
    Citation Envoyé par micka132 Voir le message
    Je ne suis pas sur d'avoir bien compris, mais a priori pourquoi ne pas mettre un secon itemsControl

    CODE

    Non testé mais l'idee est peut être la
    Comme je l'ai dit au début, je débute avec le databinding donc j'ai pas encore tous les réflexes. Cependant, ça ne marche pas
    Code xml : 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
    <ScrollViewer Height="200" HorizontalScrollBarVisibility="Auto">
                    <ItemsControl x:Name="pictureList2">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Vertical">
                                    <!-- Image groups -->
                                    <ItemsControl x:Name="pictureGroups" ItemsSource="{Binding pictures}">
                                        <ItemsControl.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <StackPanel Orientation="Horizontal">
                                                    <StackPanel Orientation="Vertical" DataContext="{Binding pictures}">
                                                        <Image Source="{Binding Source=Image}" Width="120" Height="200" Stretch="Uniform" />
                                                        <TextBlock HorizontalAlignment="Center" Text="{Binding Filename}" />
                                                    </StackPanel>
                                                </StackPanel>
                                            </ItemsPanelTemplate>
                                        </ItemsControl.ItemsPanel>
                                    </ItemsControl>
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </ScrollViewer>

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Essaye peut être ce code:

    Code xml : 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
       <ScrollViewer Height="200" HorizontalScrollBarVisibility="Auto">
            <ItemsControl x:Name="pictureList2">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Vertical"/>
                    </ItemsPanelTemplate>
                </ItemsControl.ItemsPanel>
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
     
                        <ItemsControl x:Name="pictureGroups" ItemsSource="{Binding pictures}">
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal"/>
                            </ItemsPanelTemplate>
     
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Orientation="Vertical">                                    <Image Source="{Binding Source=Image}" Width="120" Height="200" Stretch="Uniform" />
                                        <TextBlock HorizontalAlignment="Center" Text="{Binding Filename}" />
                                    </StackPanel>
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>             
                        </ItemsControl>
     
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </ScrollViewer>
    Dans la sortie de visual studio il y a les erreurs de binding qui apparaissent, pourrais tu les citer?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2003
    Messages
    1 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2003
    Messages : 1 500
    Par défaut
    Lorsque je compile, il n'y a pas d'erreurs.

    J'ai un autre morceau de mon programme bindé sur une liste sans profondeur et je ne vois pas les images. Le binding est-il correct (car mon image provient d'une BitmapImage chargée à partir d'un flux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Image Source="{Binding Source=Image}" Width="120" Height="200" Stretch="Uniform" />
    J'ai fait de nouveaux test et c'est dans la 2e collection qu'il génère aucun affichage, pourtant mes données sont bien la !

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Citation Envoyé par smarties Voir le message
    Lorsque je compile, il n'y a pas d'erreurs.

    J'ai un autre morceau de mon programme bindé sur une liste sans profondeur et je ne vois pas les images. Le binding est-il correct (car mon image provient d'une BitmapImage chargée à partir d'un flux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Image Source="{Binding Source=Image}" Width="120" Height="200" Stretch="Uniform" />
    J'ai fait de nouveaux test et c'est dans la 2e collection qu'il génère aucun affichage, pourtant mes données sont bien la !
    Les erreurs ne sont pas à la compilation mais a l'execution.
    Dans visual studio il y a un outil OutPut en anglais , probablement "Sortie" en francais (ctrl alt o) où il y a marqué les erreurs de bingings.
    Les erreurs sont du types:
    Erreur System.Windows.Data*: erreur de chemin d'accès BindingExpression*: propriété 'VOIE' introuvable sur 'T117551709110' 'T117551709110' (HashCode=21995508). BindingExpression : Path='VOIE' DataItem='T117551709110' (HashCode=21995508); l'élément cible est 'System.Windows.Controls.TextBox' (Name='VOIE'); la propriété cible est 'Text' (type 'System.String')..

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

Discussions similaires

  1. EF5 code first - problème objets imbriqués
    Par jmpad dans le forum Entity Framework
    Réponses: 2
    Dernier message: 02/05/2013, 13h41
  2. [Débutant] Update Databindings sur objet perso
    Par a.floranc dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/03/2013, 17h07
  3. [MVC3.2/JQuery] $.ajax() ou $.post() avec objets imbriqués
    Par CUCARACHA dans le forum ASP.NET MVC
    Réponses: 4
    Dernier message: 31/05/2012, 11h32
  4. Objet imbriqués problème compilation
    Par ludo86 dans le forum Débuter
    Réponses: 2
    Dernier message: 30/07/2009, 00h29
  5. Créer des objets imbriqués
    Par Ludix dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2008, 15h53

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