Partager via


Essayez ! Afficher les données d'une base de données exemple SQL

Cette page s’applique uniquement aux projets WPF

Dans Microsoft Expression Blend, vous pouvez utiliser des sources de données XML et des sources de données d’objets CLR (Common Language Runtime). Les sources de données XML sont simples d’utilisation, contrairement aux sources de données d’objets CLR qui sont beaucoup plus complexes. Les procédures suivantes expliquent comment afficher les données d’une source de données CLR dans votre application Expression Blend. Les deux premières tâches impliquent la récupération des données à partir d’un exemple de base de données et leur conversion dans un format compatible avec Expression Blend. La troisième tâche implique la création d’un projet Expression Blend contenant des objets liés aux données.

NoteRemarque :

Pour les applications Microsoft Silverlight, voir Liaison de données Silverlight Cc294789.xtlink_newWindow(fr-fr,Expression.40).png sur MSDN.

NoteRemarque :

Pour suivre les procédures de cette rubrique à la lettre, Microsoft Visual Studio 2010 , Microsoft SQL Server 2008 et l’exemple de base de données AdventureWorks doivent être installés au préalable. Pour plus d’informations sur l’obtention de l’exemple AdventureWorks, voir Installation des exemples de bases de données AdventureWorks et des autres exemples Cc294789.xtlink_newWindow(fr-fr,Expression.40).png sur MSDN.

Si vous préférez, vous pouvez créer un objet DataTable ou DataSet à partir d’une autre base de données. Dans ce cas, vous pouvez adapter les première et seconde tâches de cette rubrique à vos données. Ces principes sont les mêmes tant que vous utilisez une source de données CLR (ou Microsoft .NET Framework).

Pour définir et remplir un DataTable

La procédure suivante décrit comment créer une bibliothèque de classes dans Visual Studio 2010 afin de remplir une instance de DataTable avec des données provenant de l’exemple de base de données AdventureWorks.

  1. Dans le menu Fichier de Visual Studio 2010, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, sous Types de projets, cliquez sur Visual C#. Sous Modèles, cliquez sur Bibliothèque de classes. Nommez le nouveau projet AWDataSource , puis cliquez sur OK.

    Visual Studio génère le code du nouveau projet de bibliothèque de classes et ouvre le fichier Class1.cs aux fins de modification.

  3. Dans le fichier Class1.cs, remplacez le nom de la définition de classe publique Class1 par ProductPhotosCollection (ce nom est plus explicite).

  4. Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le nom de votre projet (AWDataSource), pointez sur Ajouter, puis cliquez sur Nouvel élément.

  5. Dans la boîte de dialogue Ajouter un nouvel élément, sélectionnez DataSet dans la liste des modèles, nommez l’élément ProductPhotos.xsd , puis cliquez sur Ajouter.

    Un dataset est ajouté à votre projet sous la forme d’un fichier de schéma et de ses fichiers de classe associés. En outre, le fichier de schéma s’ouvre également à des fins de modification.

    NoteRemarque :

    Un dataset est un objet contenant des tables de données dans lesquelles vous pouvez stocker temporairement des données en mémoire pour exécuter votre application. Pour plus d’informations, voir la vue d'ensemble des groupes de données dans Visual Studio Cc294789.xtlink_newWindow(fr-fr,Expression.40).png sur MSDN.

  6. Dans l’Explorateur de serveurs, cliquez avec le bouton droit sur Connexions de données, puis cliquez sur Ajouter une connexion.

  7. Dans la boîte de dialogue Choisir une source de données, le champ Source de données doit déjà lister Microsoft SQL Server (SqlClient).

    tip noteConseil :

    Si vous n’utilisez pas de base de données SQL Server, cliquez sur le bouton Modifier pour sélectionner une autre source de données. Les étapes suivantes ne correspondront pas à ce qui s’affichera dans la boîte de dialogue Choisir une source de données de Visual Studio.

  8. Dans le champ Nom du serveur, entrez le nom de l’instance de SQL Server sur laquelle la base de données AdventureWorks est installée.

    tip noteConseil :

    Si vous envisagez d’utiliser une base de données SQL Server autre que celle d’AdventureWorks, sélectionnez le nom du serveur sur lequel votre base de données SQL Server est installée.

  9. Sous Connexion au serveur, sélectionnez la méthode d’authentification nécessaire pour se connecter à votre instance de SQL Server. Il est possible que vous deviez contacter l’administrateur du serveur pour obtenir cette information. Authentification Windows utilise vos informations d’identification de connexion actuelles. Authentification SQL Server nécessite le nom d’utilisateur et le mot de passe du compte configuré pour accéder à votre base de données.

  10. Sous Connexion à une base de données, sélectionnez la base de données AdventureWorks, laquelle s’affichera uniquement si vos informations d’identification de connexion sont correctes, si la base de données AdventureWorks est installée sur votre ordinateur et si ce dernier exécute SQL Server.

  11. Cliquez sur le bouton Tester la connexion. Si le test de connexion échoue, consultez votre administrateur SQL Server pour obtenir de l’aide.

  12. Cliquez sur OK pour terminer la création de la connexion de données. Dans l’Explorateur de serveurs, une nouvelle connexion nommée <servername>.AdventureWorks.dbo apparaît sous le nœud Connexions de données, où <servername> représente le nom de votre serveur.

  13. Dans l’Explorateur de serveurs, développez le nouveau nœud de connexion <servername>.AdventureWorks.dbo, développez le nœud Tables, puis recherchez la table ProductPhoto. Le fichier ProductPhotos.xsd étant ouvert sur la surface de création, faites glisser la table ProductPhoto de l’Explorateur deserveurs**** vers la surface de création. Vous disposez à présent d’un dataset typé capable de se connecter à la base de données AdventureWorks et de retourner le contenu de la table ProductPhoto.

  14. Dans le fichier Class1.cs, ajoutez la méthode suivante dans la classe ProductPhotosCollection :

    private void GetData()
        {
            ProductPhotosTableAdapters.ProductPhotoTableAdapter da =
                new ProductPhotosTableAdapters.ProductPhotoTableAdapter();
            ProductPhotos.ProductPhotoDataTable dt = da.GetData();
        }
    

    L’espace de noms ProductPhotosTableAdapters est défini dans le fichier ProductPhotos.Designer.cs, qui a été généré par Visual Studio lorsque vous avez créé le ProductPhotos DataSet . Vous disposez à présent d’une méthode qui permet de remplir une instance d’un objet ProductPhotos DataTable à l’aide de données lors de l’exécution de votre application.

  15. Générez votre projet (Ctrl+Maj+B) pour vous assurer qu’il ne contient aucune erreur.

Pour adapter la collection de données à une collection WPF

La procédure suivante décrit comment créer une bibliothèque de classes dans Visual Studio 2010 pour convertir des données d’un objet DataTable en ObservableCollection de sorte qu’Expression Blend (ou toute application qui utilise Windows Presentation Foundation (WPF)) puisse effectuer une liaison aux données. Vous allez définir une classe ProductPhoto pour représenter les données dans une ligne de la table, ajouter une collection de ProductPhotos à ProductPhotosCollection en tant que membre privé, puis ajouter un accesseur public (méthode get ) afin que le code provenant de l’extérieur de la classe puisse y accéder.

tip noteConseil :

Si vous avez suivi la procédure précédente décrite dans cette rubrique, vous disposez à présent d’une instance exploitable de DataTable qui contient des données de la table ProductPhoto de la base de données AdventureWorks. Si vous disposez d’un objet DataTable ou DataSet renseigné à partir d’une autre source, vous pouvez adapter le nom de la table de données et les noms de champs dans les étapes suivantes aux données dont vous disposez.

  1. Dans Visual Studio 2010, cliquez avec le bouton droit sur le nom de votre projet dans l’Explorateur de solutions, puis cliquez sur Ajouter une référence. Sous l’onglet .NET, sélectionnez l’assembly WindowsBase . Si l’assembly WindowsBase n’apparaît pas dans la liste, cliquez sur l’onglet Parcourir et recherchez l’assembly WindowsBase.dll dans le dossier %SystemDrive%\Program Files\Reference Assemblies\Microsoft\Framework\v3.0.

  2. Cliquez sur OK. L’assembly WindowsBase implémente la classe System.Collections.Object.ObservableCollection .

  3. Tout en haut du fichier Class1.cs, ajoutez l’instruction suivante :

    using System.Collections.ObjectModel;
    
  4. Dans le fichier Class1.cs, ajoutez également la définition de classe ProductPhoto suivante à l’espace de noms AWDataSource afin de disposer d’une classe exploitable :

    public class ProductPhoto { }
    
  5. Ajoutez le membre suivant à la classe ProductPhotosCollection :

    private ObservableCollection<ProductPhoto> productPhotos =
        new ObservableCollection<ProductPhoto>();
    
  6. Ajoutez la méthode d’accesseur suivante à la classe ProductPhotosCollection :

    public ObservableCollection<ProductPhoto> ProductPhotos
    { get { return this.productPhotos; } }
    

    Les étapes suivantes impliquent la copie de l’ID, de la date de modification et des deux photos de DataTable dans ObservableCollection .

  7. Cliquez avec le bouton droit sur le nom de votre projet dans l’Explorateur de solutions, puis cliquez sur Ajouter une référence. Ajoutez une référence dans l’assembly PresentationCore .

  8. Tout en haut du fichier Class1.cs, ajoutez les instructions suivantes :

    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    
  9. Ajoutez des membres à la classe ProductPhoto afin que la classe ressemble à ceci :

    public class ProductPhoto
        {
            // Public Accessors to the private properties.
            public int ID { get { return id; } }
            public ImageSource ThumbNailPhoto { get { return thumbNailPhoto; } }
            public ImageSource LargePhoto { get { return largePhoto; } }
            public DateTime ModifiedDate { get { return modifiedDate; } }
    
            // Constructor.
            public ProductPhoto(int id, byte[] thumbNailPhoto, byte[] largePhoto,
                DateTime modifiedDate)
            {
                this.id = id;
                this.thumbNailPhoto = ByteArrayToImageSource(thumbNailPhoto);
                this.largePhoto = ByteArrayToImageSource(largePhoto);
                this.modifiedDate = modifiedDate;
            }
    
            // Private properties.
            private int id;
            private ImageSource thumbNailPhoto;
            private ImageSource largePhoto;
            private DateTime modifiedDate;
    
            // Supporting method.
            private ImageSource ByteArrayToImageSource(byte[] data)
            {
                BitmapImage image = null;
                if (null != data)
                {
                    image = new BitmapImage();
                    image.BeginInit();
                    image.StreamSource = new System.IO.MemoryStream(data);
                    image.EndInit();
                }
                return image;
            }
        }
    
  10. Ajoutez le code suivant à la classe ProductPhotosCollection à la fin de la méthode GetData afin que la méthode copie le DataTable dans ObservableCollection :

    productPhotos.Clear();
       foreach (ProductPhotos.ProductPhotoRow row in dt)
       {
           productPhotos.Add(new ProductPhoto(
               row.ProductPhotoID,
               row.ThumbNailPhoto,
               row.LargePhoto,
               row.ModifiedDate));
       }
    

    Nous allons à présent implémenter la propriété Command , car il s’agit là d’un moyen pratique de déclencher la méthode ProductsPhotosCollection.GetData .

  11. Dans le menu Fichier, cliquez sur Nouvel élément. Dans la zone Nouvel élément, cliquez sur Classe. Dans la zone Nom, tapez DelegateCommand.cs .

  12. Dans la nouvelle page, appuyez sur Ctrl+A pour sélectionner tout le contenu et appuyez sur Suppr. Copiez et collez le code suivant dans la page que vous venez de créer.

    namespace AWDataSource
    {
        using System;
        using System.Windows.Input;
    
        ///
        /// DelegateCommand is a simplified version of ICommand in WPF. You can wrap one of these around any method,
        /// and thus bind any command on any WPF object to your method.
        ///
        /// DelegateCommand also supports an IsEnabled property that you can use to turn the command on and off.
        ///
        public sealed class DelegateCommand : ICommand
        {
            // Type signature of the method that DelegateCommand works with - returns void, no arguments.
            public delegate void SimpleEventHandler();
    
            // Remember the method so that it can be called at the right time.
            private SimpleEventHandler handler;
    
            // Maintain the enabled state.
            private bool isEnabled = true;
    
            // Simple constructor: Pass in the method that needs to be called when the command executes.
            public DelegateCommand(SimpleEventHandler handler)
            {
    this.handler = handler;
            }
    
            #region ICommand implementation
    
            // Executing the command is as simple as calling the method.
            void ICommand.Execute(object arg)
            {
     this.handler();
            }
    
            // Saying whether the command can be executed.
    ICommand.CanExecute(object arg)
            {
                return this.IsEnabled;
            }
    
            // This is the event that the command architecture of WPF listens to so it knows when to update
            // the UI on command enable/disable.
            public event EventHandler CanExecuteChanged;
            #endregion
    
            // Public visibility of the isEnabled flag - note that when it is set, the event must be raised
            // so that WPF knows to update any UI that uses this command.
            public bool IsEnabled
            {
                get { return this.isEnabled; }
                set
                {
    this.isEnabled = value;
     this.OnCanExecuteChanged();
                }
            }
    
            // Simple event propagation that makes sure that someone is listening to the event before raising it.
            private void OnCanExecuteChanged()
            {
                if (this.CanExecuteChanged != null)
                {
     this.CanExecuteChanged(this, EventArgs.Empty);
                }
            }
        }
    }
    

    Dans le menu Fichier, cliquez sur Enregistrer.

    Le code contenu dans le fichier DelegateCommand.cs vous permet de lier une commande quelconque à votre méthode.

  13. Dans le fichier Class1.cs, ajoutez le membre suivant à la classe ProductPhotosCollection :

    private DelegateCommand getDataCommand;
    
  14. Ajoutez le constructeur suivant à la classe ProductPhotosCollection pour initialiser la commande :

    public ProductPhotosCollection()
        {
            getDataCommand = new DelegateCommand(delegate() { GetData(); });
        }
    
  15. Pour finir, exposez la commande en ajoutant la méthode d’accesseur suivante à la classe ProductPhotosCollection :

    public DelegateCommand GetDataCommand { get { return getDataCommand; } }
    
  16. Générez votre projet (F5) pour vous assurer qu’il ne contient aucune erreur. Vous disposez à présent d’une classe utilisable comme source de données dans une application Expression Blend (ou toute application WPF). Cette classe est soit ProductPhotosCollection, soit une classe équivalente que vous avez définie.

Pour lier des procédures à la source de données dans Expression Blend

La procédure suivante décrit comment créer une application Expression Blend très simple avec un contrôle ListBox lié à votre source de données. L’application utilise un modèle d’interface utilisateur commun appelé vue liste/détails . Le volet gauche, nommé volet de liste , contient la liste des produits. Chaque fois qu’un produit est sélectionné dans ce volet, les détails le concernant s’affichent dans le volet droit nommé volet d’informations . La mise à jour du contenu d’un volet lorsqu’un objet est sélectionné dans un autre s’effectue à l’aide de la synchronisation des données entre les contrôles.

  1. Dans Expression Blend, cliquez sur Fichier, puis sur Nouveau projet.

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez le type de projet Application WPF. Vous créez ainsi un projet pour une application Windows que vous pouvez générer et exécuter au fur et à mesure de sa conception. L’autre option est un projet Bibliothèque de contrôles WPF que vous pouvez utiliser pour concevoir des contrôles utilisables dans d’autres applications Windows.

  3. Dans la zone de texte Nom, tapez AWProductPhotos . Conservez le paramètre Langage par défaut, car cette procédure ne contient pas de code écrit à la main.

  4. Cliquez sur OK. Expression Blend charge le nouveau projet et l’affiche pour modification.

    tip noteConseil :

    Si un projet était déjà ouvert, il se peut qu’une boîte de dialogue s’affiche pour vous inviter à l’enregistrer ou à l’annuler avant d’ouvrir le nouveau projet.

  5. Une fois votre nouveau projet chargé en mémoire, enregistrez-le sur disque en cliquant dans le menu Fichier sur Enregistrer tout. La zone de texte Nom devant déjà contenir le nom AWProductPhotos, cliquez sur OK.

    Caution noteAttention :

    Dans Expression Blend, les modifications ne sont pas enregistrées automatiquement sur le disque dur ; veillez donc à enregistrer vos fichiers dès le début et régulièrement. Pour plus d’informations, voir Gestion de solutions, projets et fichiers.

  6. Dans le menu Projet, cliquez sur Ajouter une référence.

  7. Dans la boîte de dialogue Ajouter une référence, accédez au fichier AWDataSource.dll généré à la fin de la seconde tâche de cette rubrique afin d’y ajouter une référence. Le fichier AWDataSource.dll se trouve sans doute dans le dossier bin/Debug de votre projet AWDataSource.

  8. Cliquez sur OK. Le fichier AWDataSource.dll fait à présent partie de votre projet. Si vous développez le nœud Références dans le panneau Projet, vous voyez une référence au fichier AWDataSource.dll.

  9. Dans le panneau Données, cliquez sur Créer une source de données Cc294789.601d2ab6-5e4b-49ab-bb3c-064456dc8184(fr-fr,Expression.40).png, puis cliquez sur Créer une source de données d’objet.

  10. Dans la boîte de dialogue Créer une source de données d’objet, développez le nœud AWDataSource, sélectionnez ProductPhotosCollection, puis cliquez sur OK.

    Dans le panneau Données, une source de données nommée ProductPhotosCollectionDS a été ajoutée à votre projet. La source de données ProductPhotosCollectionDS représente la structure d’une instance de la classe CLR que vous avez référencée. Développez ProductPhotosCollectionDS et ProductPhotosCollection pour afficher la structure. Dans une étape ultérieure de cette tâche, vous allez déplacer des données à partir de la planche graphique dans le panneau Données pour créer de nouveaux contrôles.

  11. Dans le panneau Objets et chronologie, cliquez sur l’élément LayoutRoot pour l’activer. Lorsque vous activez l’objet, notez qu’un rectangle englobant ombré apparaît autour de son nom.

    tip noteConseil :

    Lorsque vous voulez ajouter des objets enfants à un objet ou effectuer d’autres opérations spécifiques, double-cliquez sur l’objet parent dans le panneau Objets et chronologie, puis ajoutez l’objet enfant. Cette action s’appelle l’ activation . L’objet activé est identifié par un rectangle ombré englobant son nom.

    Lorsque vous voulez modifier les propriétés d’un objet, cliquez sur son nom dans le panneau Objets et chronologie. Cette action s’appelle la sélection . L’objet sélectionné est identifié par une couleur d’arrière-plan mise en surbrillance.

    Vous pouvez sélectionner un objet sans l’activer.

  12. Dans le panneau Outils, cliquez sur SélectionCc294789.2ff91340-477e-4efa-a0f7-af20851e4daa(fr-fr,Expression.40).png. Sur la planche graphique, déplacez le pointeur sur la zone épaisse de la règle, en haut de LayoutRoot . Une règle de colonne suit votre pointeur et indique l’emplacement du nouveau séparateur de colonne en cas de clic.

  13. Cliquez pour créer un séparateur de colonne qui affectera à la colonne de gauche la même largeur que la colonne de droite. La colonne de gauche contient une liste des vignettes de produits tandis que la colonne de droite contient une grande photo représentant l’élément de liste sélectionné. Un séparateur de colonne apparaît à l’intérieur de LayoutRoot .

    tip noteConseil :

    Pour afficher l’intégralité de l’objet LayoutRoot sur la planche graphique, vous devrez peut-être faire un zoom arrière. Pour cela, entrez une valeur de zoom dans la zone de texte en bas de la planche graphique Cc294789.12524287-c48b-4cfc-b614-01951207239d(fr-fr,Expression.40).png, cliquez sur la flèche située en regard de la valeur de zoom ou faites tourner la roulette de la souris tout en maintenant la touche Ctrl enfoncée.

  14. Sur la planche graphique, placez votre pointeur sur la zone épaisse de la règle, à gauche de LayoutRoot . Cliquez pour créer un séparateur de ligne, ce qui agrandit suffisamment la ligne du haut pour y faire tenir un bouton. Cliquez sur l’icône de verrouillage Cc294789.1b4edaf6-b6a8-4498-80dc-949375fa610d(fr-fr,Expression.40).png en regard de la ligne du haut pour verrouiller la ligne à une hauteur fixe.

    tip noteConseil :

    Pour voir les résultats de l’action décrite à l’étape précédente, cliquez avec le bouton droit sur LayoutRoot dans le panneau Objets et chronologie et cliquez sur Afficher le code XAML (pour afficher le code XAML). La planche graphique passe en mode XAML, le code LayoutRoot étant mis en surbrillance. Pour voir de plus près, dans le menu Fenêtre, cliquez sur Masquer les panneaux (appuyez sur la touche F4 ou Tab).

    Une section <Grid.ColumnDefinitions> et une section <Grid.RowDefinitions> ont été ajoutées à l’objet <Grid> qui représente LayoutRoot . Les attributs Width et Height utilisent la méthode du dimensionnement proportionnel (avec la valeur *) , ce qui signifie que les tailles des colonnes sont proportionnelles les unes par rapport aux autres. Par exemple, un attribut Width de 2* produit une colonne dont la taille est le double de celle d’une colonne dont la largeur a la valeur *. La ligne que vous avez verrouillée n’est pas basée sur cette méthode, car sa hauteur est fixe.

    Lorsque vous avez fini d’examiner le code XAML, n’oubliez pas de revenir au mode Création et de restaurer les panneaux (appuyez sur la touche F4 ou Tab).

  15. Dans le panneau Données, faites glisser GetDataCommand (sous ProductPhotosCollection) dans la cellule de grille supérieure gauche sur la planche graphique.

  16. Dans le panneau Outils, double-cliquez sur Bouton pour dessiner un bouton sur la planche graphique. Dans la liste déroulante qui apparaît, cliquez sur Button.

  17. Dans la boîte de dialogue Créer une liaison de données, dans la liste déroulante Propriété de, choisissez Command, puis cliquez sur OK. Cette action crée un bouton qui est lié à la méthode d’accesseur GetDataCommand dans votre classe AWDataSource. Lorsque vous cliquez sur le bouton au moment de l’exécution, GetDataCommand est exécuté sur la source de données ProductPhotosCollection ; de plus, comme dans la seconde tâche décrite dans cette rubrique, l’implémentation de cette commande appelle la méthode GetData .

    tip noteConseil :

    Vous pouvez déplacer et redimensionner le nouveau bouton sur la planche graphique en cliquant sur l’outil Sélection du panneau Outils, en sélectionnant le nouveau bouton sur la planche graphique ou dans le panneau Objets et chronologie, puis en utilisant les ornements sur la planche graphique. Pour plus d’informations, voir Repositionner ou translater un objet et Redimensionner un objet ou le mettre à l’échelle.

    tip noteConseil :

    Vous pouvez accéder aux liaisons de données dans le panneau Propriétés. Pour rouvrir la boîte de dialogue Créer une liaison de données après avoir créé la liaison de données, sélectionnez au préalable Button dans le panneau Objets et chronologie. Ensuite, Sous Divers dans le panneau Propriétés, cliquez sur Options avancées Cc294789.12e06962-5d8a-480d-a837-e06b84c545bb(fr-fr,Expression.40).png en regard de la propriété Command, puis cliquez sur Liaison de données.

  18. Sélectionnez l’objet [Button] dans le panneau Objets et chronologie, puis recherchez la propriété Content sous Propriétéscommunes**** dans le panneau Propriétés. Définissez la propriété Content en entrant le texte Obtenir les photos du produit , puis appuyez sur Entrée.

  19. Déplacez et redimensionnez l’objet [Button] en cliquant sur l’outil Sélection du panneau Outils et en utilisant les ornements de la planche graphique. Faites en sorte que l’objet [Button] tienne dans la cellule de grille en haut à gauche. Ensuite, sous Disposition, dans le panneau Propriétés, définissez les propriétés suivantes :

    • Affectez aux propriétés Width et Height la valeur  Auto .

    • Affectez aux propriétés Margin la valeur 0 .

    • Affectez aux propriétés HorizontalAlignment et VerticalAlignment la valeur  Center .

    Ces paramètres garantissent que le bouton est centré dans la cellule de la grille et que sa taille correspond exactement au texte de la propriété Content .

  20. Dans le panneau Données, faites glisser ProductPhotos (Array) dans la cellule de grille inférieure gauche sur la planche graphique.

  21. Dans la boîte de dialogue Créer une liaison de données, dans la liste déroulante Propriété de, choisissez ItemsSource , puis cliquez sur OK.

    tip noteConseil :

    Un modèle de données est avant tout une arborescence d’objets d’interface utilisateur qui contient des liaisons à des données. Chaque fois que des données d’un type particulier doivent être affichées, le modèle de données approprié est sélectionné ; le modèle met par ailleurs en forme une nouvelle copie de l’arborescence d’objets, enrichie des données mises à jour. Chaque élément affiché dans l’objet ListBox est un objet de type ProductPhoto que vous avez implémenté dans la seconde tâche de cette rubrique.

  22. Dans la boîte de dialogue Créer un modèle de données, sélectionnez la case d’option Nouveau modèle de données et champs d’affichage. Cette option définit la structure du type de données que vous avez déplacé depuis le panneau Données (par exemple chaque objet d’une collection d’objets ProductPhoto). Vous pouvez à présent lier des parties de la structure de données et définir à quoi va ressembler l’arborescence d’objets du modèle de données. Une liste déroulante déterminant l’objet utilisé pour présenter le champ de données (objets StackPanel et TextBlock ) est placée en regard de chaque élément de données. Un libellé indiquant à laquelle des propriétés l’objet de données sera lié se trouve également en regard.

  23. Désélectionnez l’option LargePhoto, car vous voulez l’afficher uniquement dans le contrôle ListBox .

  24. Le champ de données ModifiedDate est actuellement de type StackPanel , mais vous devez remplacer le contrôle par un type d’objet plus adapté à l’affichage de ce type de données. Dans la liste déroulante, en regard de ModifiedDate, choisissez TextBlock . Le libellé devient automatiquement Text .

  25. Le champ de données ThumbNailPhoto est actuellement de type ImageSource , mais vous devez remplacer le contrôle par un type d’objet plus adapté à l’affichage de ce type de données. Dans la liste déroulante, en regard de ThumbNailPhoto, choisissez Image . Le libellé devient automatiquement Source .

  26. Cliquez sur OK. Un nouveau ListBox est inséré dans le document.

    tip noteConseil :

    Un modèle de données est une ressource. Pour modifier le modèle de données ProductPhotosTemplate après sa création, développez le nœud Window1.xaml dans le panneau Ressources, développez Fenêtre, puis cliquez sur le bouton en regard de ProductPhotosTemplate.

  27. Sélectionnez l’objet [ListBox] dans le panneau Objets et chronologie, puis sous Disposition dans le panneau Propriétés, procédez comme suit :

    • Affectez aux propriétés Width et Height la valeur  Auto .

    • Affectez à la propriété Margin la valeur 8 .

    • Affectez aux propriétés HorizontalAlignment et VerticalAlignment la valeur  Center .

    Ces paramètres garantissent que le contrôle ListBox remplit presque entièrement la cellule de la grille en bas à gauche.

  28. Dans le panneau Outils, sélectionnez Image  Cc294789.adb61060-da5f-4279-8c0d-3681bfeb145c(fr-fr,Expression.40).png.

    tip noteConseil :

    Si le contrôle Image ne s’affiche pas dans le panneau Outils, vous pouvez le rechercher en cliquant sur le bouton Composants Cc294789.0d8b8d29-1af9-418f-8741-be3097d76eab(fr-fr,Expression.40).png. Lorsque vous avez sélectionné un contrôle dans cette galerie, son icône apparaît dans le panneau Outils au-dessus du bouton Composants.

  29. Sur la planche graphique, dessinez une nouvelle Image dans la cellule de la grille en bas à droite, en remplissant presque entièrement la cellule.

  30. Sélectionnez l’objet [Image] dans le panneau Objets et chronologie, puis recherchez la propriété Source sous Propriétés communes dans le panneau Propriétés. Cliquez sur le nom de la propriété Source , puis, dans la liste déroulante qui apparaît, sélectionnez Liaison de données.

  31. Dans la boîte de dialogue Créer une liaison de données, sélectionnez l’onglet Propriété de l’élément, car vous allez lier les données à une propriété de l’objet [ListBox] .

  32. Sous Éléments de la scène, développez Fenêtre et LayoutRoot , puis sélectionnez votre ListBox ( [System.WIndows.Controls.ListBox] ).

  33. Dans la zone de liste déroulante Afficher, sélectionnez Toutes les propriétés. Toutes les propriétés disponibles pour la liaison sont affichées, pas uniquement celles du même type de données que la propriété Source ( String ).

  34. Sous Propriétés, sélectionnez SelectedItem : (Object) .

  35. Activez la case à cocher Utiliser une expression de chemin personnalisée. L’expression par défaut est SelectedItem . Affectez-lui la valeur SelectedItem.LargePhoto afin d’effectuer la liaison au membre LargePhoto de l’objet ProductPhoto actuellement sélectionné.

  36. Cliquez sur Terminer.

  37. Dans le menu Projet, cliquez sur Tester Projet (ou appuyez sur F5). Lorsque l’application démarre, testez-la en cliquant sur Obtenir les photos du produit. Lorsque la zone de liste se charge avec les données, faites défiler ses éléments et vérifiez la grande photo qui apparaît dans la colonne de droite.

Application terminée

Cc294789.b769099f-ccd9-42ac-97f1-70424dfef1ee(fr-fr,Expression.40).png

Copyright © 2011 Microsoft Corporation. Tous droits réservés.