Il est essentiel de pouvoir afficher et manipuler des données réelles dans l’interface utilisateur pour les fonctionnalités de nombreuses applications. Cet article vous montre ce que vous devez savoir pour afficher une collection d’objets Client dans une liste.
Il ne s’agit pas d’un didacticiel. Si vous en souhaitez un, consultez notre didacticiel de liaison de données qui vous fournira une expérience interactive pas à pas.
Nous allons commencer par une présentation rapide de la liaison de données : en quoi elle consiste et comment elle fonctionne. Puis nous allons ajouter un ListView à l’interface utilisateur, ajouter une liaison de données et la personnaliser avec des fonctionnalités supplémentaires.
Ce que vous devez savoir
La liaison de données est un moyen d’afficher les données d’une application dans son interface utilisateur. Cela permet d’établir une séparation des responsabilités dans votre application, en gardant votre interface utilisateur séparée de votre autre code. Cela crée un modèle conceptuel plus fluide et plus facile à lire et à gérer.
Chaque liaison de données comporte deux parties :
une source qui fournit les données à lier ;
une cible dans l’interface utilisateur où les données sont affichées.
Pour implémenter une liaison de données, vous devez ajouter du code à la source qui fournit les données à la liaison. Vous devez également ajouter l’une des deux extensions de balisage à votre code XAML pour spécifier les propriétés de source de données. Voici la principale différence entre les deux :
x:Bind est fortement typée et génère du code au moment de la compilation pour de meilleures performances. x:Bind est par défaut une liaison à usage unique optimisée pour l’affichage rapide des données en lecture seule qui ne changent pas.
Binding est faiblement typée et assemblée lors de l’exécution. Elle produit des performances inférieures à celles de x:Bind. Dans la plupart des cas, vous devez utiliser x:Bind au lieu de Binding. Toutefois, vous la trouverez probablement dans des codes anciens. Binding est par défaut un transfert de données à sens unique optimisé pour les données en lecture seule susceptibles d’être modifiées à la source.
Nous vous recommandons d’utiliser x:Bind chaque fois que c’est possible, comme nous allons l’illustrer dans les extraits de code de cet article. Pour plus d’informations sur les différences, consultez Comparaison des fonctionnalités {x:Bind} et {Binding}.
Création d'une source de données
Tout d’abord, vous avez besoin d’une classe pour représenter vos données client. Pour vous donner un point de référence, nous allons illustrer le processus dans cet exemple simple :
C#
publicclassCustomer
{
publicstring Name { get; set; }
}
Créer une liste
Si vous souhaitez afficher les clients, vous devez créer une liste pour les contenir. Le contrôle ListView est un contrôle XAML de base idéal pour cette tâche. Votre contrôle ListView nécessite actuellement une position dans la page et aura rapidement besoin d’une valeur pour sa propriété ItemSource.
Une fois que vous avez lié des données à votre contrôle ListView, nous vous invitons à vous reporter à la documentation et à vous familiariser avec la personnalisation de son apparence et de sa disposition afin de mieux répondre à vos besoins.
Lier des données à votre liste
Maintenant que vous avez créé une interface utilisateur de base pour contenir vos liaisons, vous devez configurer votre source pour les fournir. Voici un exemple de la manière de procéder :
C#
publicsealedpartialclassMainPage : Page
{
public ObservableCollection<Customer> Customers { get; }
= new ObservableCollection<Customer>();
publicMainPage()
{
this.InitializeComponent();
// Add some customersthis.Customers.Add(new Customer() { Name = "NAME1"});
this.Customers.Add(new Customer() { Name = "NAME2"});
this.Customers.Add(new Customer() { Name = "NAME3"});
}
}
La Vue d’ensemble de la liaison de données vous explique comment régler un problème similaire dans sa section sur la liaison à une collection d’éléments. Le présent exemple illustre les étapes essentielles suivantes :
Dans le code-behind de votre interface utilisateur, créez une propriété de type ObservableCollection<T> pour contenir les objets client.
Liez l’ItemSource de votre contrôle ListView à cette propriété.
Fournissez un ItemTemplate de base au contrôle ListView, qui configurera l’affichage de chaque élément dans la liste.
N’hésitez pas à consulter la documentation ListView si vous souhaitez personnaliser la disposition, ajouter une sélection d’éléments ou adapter le DataTemplate que vous venez de créer. Mais que se passe-t-il si vous souhaitez modifier vos clients ?
Modifier vos clients par le biais de l’interface utilisateur
Vous avez affiché les clients dans une liste, mais la liaison de données vous permet d’en faire plus. Que se passe-t-il si vous pouvez modifier vos données directement à partir de l’interface utilisateur ? Pour ce faire, nous allons tout d’abord parler des trois modes de liaison de données :
À usage unique : cette liaison de données est activée uniquement une fois et ne réagit pas aux modifications apportées.
À sens unique : cette liaison de données met à jour l’interface utilisateur avec les modifications apportées à la source de données.
Bidirectionnelle : cette liaison de données met à jour l’interface utilisateur avec les modifications apportées à la source de données et met également à jour les données avec les modifications apportées dans l’interface utilisateur.
Si vous avez suivi les extraits de code antérieurs, la liaison que vous avez apportée utilise x:Bind et ne spécifie pas de mode, ce qui produit une liaison à usage unique. Si vous souhaitez modifier vos clients directement à partir de l’interface utilisateur, vous devez la remplacer par une liaison bidirectionnelle, afin que les modifications des données soient transférées vers les objets client. Présentation détaillée de la liaison de données contient des informations supplémentaires.
La liaison bidirectionnelle met également à jour l’interface utilisateur si la source de données est modifiée. Pour que cela fonctionne, vous devez implémenter INotifyPropertyChanged sur la source et vous assurer que ses méthodes setter de propriété déclenchent l’événement PropertyChanged. Une pratique courante consiste à les faire appeler une méthode d’assistance telle que la méthode OnPropertyChanged, comme illustré ci-dessous :
C#
publicclassCustomer : INotifyPropertyChanged
{
privatestring _name;
publicstring Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
this.OnPropertyChanged();
}
}
}
publicevent PropertyChangedEventHandler PropertyChanged;
publicvoidOnPropertyChanged([CallerMemberName] string propertyName = null) =>
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Rendez ensuite le texte dans votre ListView modifiable à l’aide d’un TextBox au lieu d’un TextBlock et assurez-vous de définir le Mode sur vos liaisons de données sur TwoWay (bidirectionnel).
Un moyen rapide de vous assurer que cela fonctionne consiste à ajouter un deuxième ListView avec des contrôles TextBox et des liaisons OneWay. Les valeurs de la seconde liste changent automatiquement lorsque vous modifiez la première.
Notes
Modifier directement à l’intérieur d’un contrôle ListView est un moyen simple de montrer une liaison bidirectionnelle en action, mais cela peut poser des problèmes de facilité d’utilisation. Si vous cherchez à améliorer votre application, envisagez d’utiliser d’autres contrôles XAML pour modifier vos données et de garder votre ListView en affichage seul.
Aller plus loin
Maintenant que vous avez créé une liste de clients avec une liaison bidirectionnelle, n’hésitez pas à vous reporter à la documentation dont nous avons fourni les liens et à faire vos propres tests. Vous pouvez également consulter notre tutoriel de liaison de données si vous souhaitez une procédure pas à pas sur les liaisons de base et avancées, ou examiner des contrôles tels que le modèle Liste/Détails pour créer une interface utilisateur plus solide.
API et documents utiles
Voici un résumé rapide des API et des autres documents utiles pour vous aider à commencer à utiliser la Liaison de données.
Regardez la liaison de données en action, notamment la classe BindableBase (dans le dossier « Common ») pour une implémentation standard de INotifyPropertyChanged.
Créer une interface utilisateur avec la liaison de données. Votre interface utilisateur est automatiquement mise à jour en fonction des données les plus récentes, tandis que les données sont mises à jour suite aux modifications apportées à l’interface utilisateur.
Les équipes de conception Microsoft suivent un processus de création d’applications en cinq étapes distinctes : concept, structure, dynamique, visuels et prototype. Nous vous encourageons à adopter un processus similaire en prenant plaisir à créer des expériences novatrices dont tout le monde pourra profiter.
Consultez une liste de liens vers des articles sur le développement d’applications de plateforme Windows universelle (UWP) pour Windows, notamment une vue d’ensemble, des exemples et des informations de référence sur les API.
Découvrez les principaux types et API dont vous avez besoin pour lire et écrire des données dans des fichiers, à l’intérieur d’une application de plateforme Windows universelle (UWP).