Partager via


Vue d’ensemble de la liaison de données WPF avec LINQ to XML

Cet article présente les fonctionnalités de liaison de données dynamiques dans l'espace de noms System.Xml.Linq. Ces fonctionnalités peuvent être utilisées comme source de données pour les éléments d’interface utilisateur dans les applications WPF (Windows Presentation Foundation). Ce scénario s’appuie sur des propriétés dynamiques spéciales de System.Xml.Linq.XAttribute et System.Xml.Linq.XElement.

XAML et LINQ vers XML

Le langage XAML (Extensible Application Markup Language) est un dialecte XML créé par Microsoft pour prendre en charge les technologies .NET. Il est utilisé dans WPF pour représenter des éléments d’interface utilisateur et des fonctionnalités associées, telles que les événements et la liaison de données. Dans Windows Workflow Foundation, XAML est utilisé pour représenter la structure du programme, telle que le contrôle de programme (flux de travail). XAML permet aux aspects déclaratifs d’une technologie d’être séparés du code procédural associé qui définit le comportement plus individualisé d’un programme.

Il existe deux façons larges d’interagir avec XAML et LINQ to XML :

  • Étant donné que les fichiers XAML sont des fichiers XML bien formés, ils peuvent être interrogés et manipulés via des technologies XML telles que LINQ to XML.

  • Étant donné que les requêtes LINQ to XML représentent une source de données, ces requêtes peuvent être utilisées comme source de données pour la liaison de données pour les éléments d’interface utilisateur WPF.

Cette documentation décrit le deuxième scénario.

Liaison de données dans Windows Presentation Foundation

La liaison de données WPF permet à un élément d’interface utilisateur d’associer l’une de ses propriétés à une source de données. Il s’agit d’un Label exemple simple dont le texte présente la valeur d’une propriété publique dans un objet défini par l’utilisateur. La liaison de données WPF s’appuie sur les composants suivants :

Composant Descriptif
Cible de liaison Élément d’interface utilisateur à associer à la source de données. Les éléments visuels dans WPF sont dérivés de la UIElement classe.
Propriété cible Propriété de dépendance de la cible de liaison qui reflète la valeur de la source de liaison de données. Les propriétés de dépendance sont directement prises en charge par la DependencyObject classe, qui UIElement dérive de.
Source de liaison Objet source pour une ou plusieurs valeurs fournies à l’élément d’interface utilisateur pour la présentation. WPF prend automatiquement en charge les types suivants en tant que sources de liaison : objets CLR, objets de données ADO.NET, données XML (de requêtes XPath ou LINQ à XML) ou un autre DependencyObject.
Chemin d’accès source Propriété de la source de liaison qui détermine la valeur ou le jeu de valeurs à lier.

Une propriété de dépendance est un concept spécifique à WPF qui représente une propriété calculée dynamiquement d’un élément d’interface utilisateur. Par exemple, les propriétés de dépendance ont souvent des valeurs ou des valeurs par défaut fournies par un élément parent. Ces propriétés spéciales sont soutenues par des instances de la DependencyProperty classe (et non des champs comme avec les propriétés standard). Pour plus d’informations, consultez Vue d’ensemble des propriétés de dépendance.

Liaison de données dynamiques dans WPF

Par défaut, la liaison de données se produit uniquement lorsque l’élément d’interface utilisateur cible est initialisé. Il s’agit de la liaison à usage unique . Dans la plupart des cas, cela est insuffisant ; En règle générale, une solution de liaison de données nécessite que les modifications soient propagées dynamiquement au moment de l’exécution à l’aide de l’une des options suivantes :

  • La liaison unidirectionnelle entraîne la propagation automatique des modifications d’un côté. Le plus souvent, les modifications apportées à la source sont reflétées dans la cible, mais l’inverse peut parfois être utile.

  • En liaison bidirectionnelle , les modifications apportées à la source sont propagées automatiquement à la cible et les modifications apportées à la cible sont automatiquement propagées à la source.

Pour que la liaison unidirectionnelle ou bidirectionnelle se produise, la source doit implémenter un mécanisme de notification de modification, par exemple en implémentant l’interface INotifyPropertyChanged ou en utilisant un modèle PropertyNameChanged pour chaque propriété prise en charge.

Pour plus d’informations sur la liaison de données dans WPF, consultez La liaison de données (WPF)

Propriétés dynamiques dans les classes LINQ to XML

La plupart des classes LINQ to XML ne sont pas qualifiées de sources de données dynamiques WPF appropriées. Certaines des informations les plus utiles sont disponibles uniquement par le biais de méthodes, pas de propriétés et de propriétés dans ces classes n’implémentent pas les notifications de modification. Pour prendre en charge la liaison de données WPF, LINQ to XML expose un ensemble de propriétés dynamiques.

Ces propriétés dynamiques sont des propriétés d’exécution spéciales qui dupliquent les fonctionnalités des méthodes et propriétés existantes dans les classes XAttribute et XElement. Ils ont été ajoutés à ces classes uniquement pour les permettre d’agir en tant que sources de données dynamiques pour WPF. Pour répondre à ce besoin, toutes ces propriétés dynamiques implémentent des notifications de modification. Une référence détaillée pour ces propriétés dynamiques est fournie dans la section suivante, propriétés dynamiques LINQ to XML.

Remarque

La plupart des propriétés publiques standard, trouvées dans les différentes classes de l'espace de noms System.Xml.Linq, peuvent être utilisées pour la liaison de données ponctuelle. Toutefois, n’oubliez pas que ni la source ni la cible ne seront mises à jour dynamiquement dans ce schéma.

Accéder aux propriétés dynamiques

Les propriétés dynamiques dans les classes XAttribute et XElement ne sont pas accessibles comme les propriétés standard. Par exemple, dans les langages compatibles CLR tels que C#, ils ne peuvent pas être :

  • Accessible directement au moment de la compilation. Les propriétés dynamiques sont invisibles pour le compilateur et pour Visual Studio IntelliSense.

  • Découverte ou accès au moment de l’exécution à l’aide de la réflexion .NET. Même au moment de l’exécution, ils ne sont pas des propriétés au sens CLR de base.

En C#, les propriétés dynamiques sont accessibles uniquement au moment de l’exécution via les installations fournies par l’espace System.ComponentModel de noms.

En revanche, dans une source XML, les propriétés dynamiques sont accessibles via une notation simple sous la forme suivante :

<object>.<dynamic-property>

Les propriétés dynamiques de ces deux classes se résolvent soit en une valeur utilisable directement, soit en un indexeur auquel il faut fournir un index pour obtenir la valeur résultante ou la collection de valeurs. La dernière syntaxe prend la forme suivante :

<object>.<dynamic-property>[<index-value>]

Pour plus d’informations, consultez Propriétés dynamiques LINQ to XML.

Pour implémenter la liaison dynamique WPF, les propriétés dynamiques seront utilisées avec les fonctionnalités fournies par l'espace de noms System.Windows.Data, notamment la classe Binding.

Voir aussi