Partage via


IProvideValueTarget Interface

Définition

Représente un service qui fait état des relations de propriétés d’objet situationnelles pour l’évaluation de l’extension de balisage.

public interface class IProvideValueTarget
public interface IProvideValueTarget
type IProvideValueTarget = interface
Public Interface IProvideValueTarget

Remarques

IProvideValueTarget représente un service qui signale des informations sur la structure objet-propriété qui entoure l’endroit où un convertisseur de valeurs est appelé.

Les convertisseurs de types et les extensions de balisage peuvent interroger IProvideValueTarget en tant que service sur le contexte de service fourni par un enregistreur d’objets XAML, lorsque l’enregistreur d’objets XAML appelle le comportement de conversion de valeur. Pour plus d’informations, consultez Convertisseurs de types et extensions de balisage pour XAML et contextes de service disponibles pour les convertisseurs de types et les extensions de balisage.

Pour les extensions de balisage en particulier, un scénario IProvideValueTarget qui est utile consiste à déterminer la validité de l’utilisation situationnelle de votre extension de balisage. Par exemple, votre extension de balisage peut implémenter un mécanisme de report de valeur, mais l’utilisation de ce mécanisme peut être appropriée uniquement si l’objet cible est capable d’utiliser d’autres composants de votre mécanisme de report au moment de l’exécution. Vous pouvez case activée les caractéristiques du système de type de l’objet retourné en tant que TargetObject et vous assurer que l’objet prend en charge votre technique de report. Si c’est le cas, votre extension de balisage retourne une valeur et, si ce n’est pas le cas, votre extension de balisage lève une exception qui sera récupérée en tant qu’exception interne par un enregistreur d’objets XAML. Un scénario similaire garantit qu’une propriété particulière prend en charge une fonctionnalité, en vérifiant les caractéristiques système de type du TargetProperty.

Bien que le nom IProvideValueTarget de l’API puisse impliquer une association avec MarkupExtension.ProvideValue, les informations signalées par IProvideValueTarget peuvent également être utiles à un TypeConverter ou .ValueSerializer Un TypeConverter ou ValueSerializer ont généralement plus de contexte qu’une extension de balisage, car ils sont dédiés à un type cible particulier ou à une propriété cible, et par conséquent, la validité situationnelle est généralement prévisible dans le système de type. Toutefois, d’autres scénarios existent. Voici la liste de certains scénarios qui peuvent être implémentés par un convertisseur de type ou une extension de balisage :

  • Obtenez TargetObject pour lire instance valeurs d’autres propriétés sur cet objet. Notez que votre gestion ici peut devoir être robuste pour les valeurs non définies, car l’ordre de traitement des membres XAML sur l’objet cible peut être non déterministe.

  • Obtenez TargetObject pour lire les métadonnées au niveau du type ou pour vérifier que les interfaces requises sont implémentées par le type.

  • Obtenir TargetProperty pour lire les métadonnées de propriété.

L’un des scénarios consiste à utiliser IProvideValueTarget des informations pour limiter les objets ou propriétés autorisés à être définis par votre extension de balisage.

Avant d’essayer d’utiliser le service, assurez-vous que le service lui-même n’est pas null retourné par le paramètre de fournisseur de services approprié que vous utilisez pour le contexte.

Important

Lors de l’utilisation du service, il est particulièrement important de ne pas modifier l’objet référencé par la TargetObject propriété ou d’autres objets référencés par cet objet. Pour WPF en particulier, ces modifications peuvent entraîner des modifications inattendues qui invalideraient le système de propriétés WPF.

Notes

N’utilisez pas le type de TargetProperty pour déterminer le type précis qu’une extension de balisage ou un convertisseur de type doit retourner. Ce n’est pas une bonne pratique. Votre type de retour doit être cohérent avec l’attribut (MarkupExtensionReturnTypeAttribute pour les extensions de balisage) ou les modèles (nom de classe du convertisseur de type).

Dans les versions précédentes du .NET Framework, cette interface existait dans l’assembly WindowsBase spécifique à WPF. Dans .NET Framework 4, IProvideValueTarget se trouve dans l’assembly System.Xaml. Pour plus d'informations, consultez Types Migrated from WPF to System.Xaml.

Remarques sur l'utilisation de WPF

Ce service prend en charge des fonctionnalités d’infrastructure telles que la liaison sur une propriété de dépendance.

Dans WPF, le service représenté par IProvideValueTarget peut retourner des objets et des propriétés pour les situations où la valeur à retourner à partir d’une extension de balisage ou d’un convertisseur de type dépend du contexte.

IProvideValueTarget est fortement exploité dans l’implémentation interne de BindingBase, la classe qui implémente le mécanisme de liaison pour les propriétés de dépendance dans WPF.

Un fournisseur de services internes par défaut pour WPF implémente IProvideValueTarget pour une utilisation par une extension de balisage ou un convertisseur de type personnalisé. L’objet et la propriété signalés par IProvideValueTarget ne peuvent être définis que par le service WPF interne. Pour aller au-delà de cette définition du fonctionnement IProvideValueTarget , il faudrait définir votre propre fournisseur de services pour les utilisations de l’extension de balisage et du convertisseur de type qui implémente au moins les IProvideValueTarget services et IXamlTypeResolver . Il s’agit d’un scénario avancé qui n’est pas décrit ici.

Une valeur null pour TargetProperty ou TargetObject ne signifie pas nécessairement qu’une extension de balisage ou un convertisseur de type ne peut pas agir, bien que cela dépend de votre implémentation. Un exemple de cas où les valeurs de sont IProvideValueTarget null même si le service est disponible est si votre extension de balisage est imbriquée dans une autre extension de balisage, telle qu’un Binding. Une implémentation qui s’appuie sur IProvideValueTarget doit toujours case activée pour les valeurs Null, si uniquement dans le but de lever une exception spécifique, si c’est votre conception prévue.

Propriétés

TargetObject

Obtient l’objet cible qui est signalé.

TargetProperty

Obtient un identificateur pour la propriété cible qui est signalée.

S’applique à

Voir aussi