Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. tiré de Lignes directrices de conception de framework : Conventions, Idiomes et Modèles pour les bibliothèques .NET réutilisables, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations de cette page peuvent être obsolètes.
Une propriété de dépendance (DP) est une propriété régulière qui stocke sa valeur dans un magasin de propriétés au lieu de la stocker dans une variable de type (champ), par exemple.
Une propriété de dépendance jointe est un type de propriété de dépendance modélisée en tant que méthodes Get et Set statiques représentant des « propriétés » décrivant les relations entre les objets et leurs conteneurs (par exemple, la position d’un Button objet sur un Panel conteneur).
✔️ Fournissez les propriétés de dépendance, si vous avez besoin des propriétés pour prendre en charge les fonctionnalités WPF telles que le style, les déclencheurs, la liaison de données, les animations, les ressources dynamiques et l’héritage.
Conception de propriété de dépendance
✔️ HÉRITEZ de DependencyObject, ou de l’un de ses sous-types, lors de l’implémentation des propriétés de dépendance. Le type fournit une implémentation très efficace d'un stockage de propriétés et prend automatiquement en charge la liaison de données WPF.
✔️ Fournissez une propriété CLR standard et un champ statique public en lecture seule stockant une instance de System.Windows.DependencyProperty pour chaque propriété de dépendance.
✔️ Implémentez des propriétés de dépendance en appelant des méthodes DependencyObject.GetValue d’instance et DependencyObject.SetValue.
✔️ Nommez le champ statique de la propriété de dépendance en ajoutant à la fin du nom de la propriété « Property ».
❌ NE PAS définir les valeurs par défaut des propriétés de dépendance explicitement dans le code ; définissez-les dans les métadonnées à la place.
Si vous définissez une propriété par défaut explicitement, vous pouvez empêcher cette propriété d’être définie par certains moyens implicites, comme un style.
❌ NE PAS placer de code dans les accesseurs de propriétés autres que le code standard pour accéder au champ statique.
Ce code ne s’exécute pas si la propriété est définie par des moyens implicites, comme un style, car le style utilise directement le champ statique.
❌ N’utilisez PAS les propriétés de dépendance pour stocker des données sécurisées. Même les propriétés de dépendance privée sont accessibles publiquement.
Conception de propriété de dépendance attachée
Les propriétés de dépendance décrites dans la section précédente représentent les propriétés intrinsèques du type déclarant ; par exemple, la Text propriété est une propriété de TextButton, qui la déclare. Un type spécial de propriété de dépendance est la propriété de dépendance jointe.
Un exemple classique d’une propriété jointe est la Grid.Column propriété. La propriété représente la position de la colonne de Button (et non pas celle de Grid), mais elle n’est pertinente que si le Button est contenu dans un Grid, et qu’il est donc "associé" aux Buttons par les Grids.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0">Click</Button>
<Button Grid.Column="1">Clack</Button>
</Grid>
La définition d’une propriété jointe ressemble principalement à celle d’une propriété de dépendance régulière, sauf que les accesseurs sont représentés par des méthodes Get et Set statiques :
public class Grid {
public static int GetColumn(DependencyObject obj) {
return (int)obj.GetValue(ColumnProperty);
}
public static void SetColumn(DependencyObject obj, int value) {
obj.SetValue(ColumnProperty,value);
}
public static readonly DependencyProperty ColumnProperty =
DependencyProperty.RegisterAttached(
"Column",
typeof(int),
typeof(Grid)
);
}
Validation des propriétés de dépendance
Les propriétés implémentent souvent ce qu’on appelle la validation. La logique de validation s’exécute lorsqu’une tentative est effectuée pour modifier la valeur d’une propriété.
Malheureusement, les accesseurs de propriété de dépendance ne peuvent pas contenir de code de validation arbitraire. Au lieu de cela, la logique de validation des propriétés de dépendance doit être spécifiée lors de l’inscription des propriétés.
❌ NE PAS placer la logique de validation des propriétés de dépendance dans les accesseurs de la propriété. Au lieu de cela, passez un rappel de validation à la méthode DependencyProperty.Register.
Notifications de modification de propriété de dépendance
❌ N’implémentez pas la logique de notification de modification dans les accesseurs de propriété de dépendance. Les propriétés de dépendance ont une fonctionnalité de notifications de modification intégrée qui doit être utilisée en fournissant un rappel de notification de modification au PropertyMetadata.
Contrainte de valeur de propriété de dépendance
La coercition de propriété a lieu lorsque la valeur donnée à un setter de propriété est modifiée par le setter avant que le stockage de propriété ne soit réellement modifié.
❌ N’implémentez pas la logique de contrainte dans les accesseurs de propriété de dépendance.
Les propriétés de dépendance ont une fonctionnalité de contrainte intégrée et peuvent être utilisées en fournissant un rappel de contrainte à l’objet PropertyMetadata.
Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.
Réimprimé par l’autorisation de Pearson Education, Inc. tiré de Framework Design Guidelines : Conventions, Idioms et Patterns pour les bibliothèques .NET réutilisables, 2e édition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la Série de développement Microsoft Windows.