IProvideValueTarget Schnittstelle

Definition

Stellt einen Dienst dar, der situationsbedingte Objekteigenschaftsbeziehungen zur Auswertung der Markuperweiterung meldet.

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

Hinweise

IProvideValueTarget stellt einen Dienst dar, der Informationen über die Objekteigenschaftsstruktur meldet, in der ein Wertkonverter aufgerufen wird.

Typkonverter und Markuperweiterungen können IProvideValueTarget als Dienst im Dienstkontext abfragen, der von einem XAML-Objektautor bereitgestellt wird, wenn der XAML-Objektautor das Wertkonvertierungsverhalten aufruft. Weitere Informationen finden Sie unter Typkonverter und Markuperweiterungen für XAML- und Dienstkontexte, die für Typkonverter und Markuperweiterungen verfügbar sind.

Für Markuperweiterungen ist ein Szenario nützlich, in IProvideValueTarget dem die Gültigkeit der Situation der Markuperweiterung bestimmt wird. Die Markuperweiterung kann z. B. einen Wertverzögerungsmechanismus implementieren, aber die Verwendung dieses Mechanismus kann nur geeignet sein, wenn das Zielobjekt andere Komponenten des Verzögerungsmechanismus zur Laufzeit verwenden kann. Sie können die Typsystemeigenschaften des zurückgegebenen TargetObject Objekts überprüfen und sicherstellen, dass das Objekt Ihre Verzögerungstechnik unterstützt. Wenn dies der Fall ist, gibt ihre Markuperweiterung einen Wert zurück, und wenn nicht, löst Ihre Markuperweiterung eine Ausnahme aus, die als innere Ausnahme von einem XAML-Objektautor aufgenommen wird. Ein ähnliches Szenario stellt sicher, dass eine bestimmte Eigenschaft eine Funktion unterstützt, indem Sie die Typsystemeigenschaften des TargetPropertyTypsystems überprüfen.

Obwohl der API-Name IProvideValueTarget möglicherweise eine Zuordnung mit MarkupExtension.ProvideValuebedeutet, kann die von ihnen gemeldeten IProvideValueTarget Informationen auch für eine oder ValueSerializereine TypeConverter Oder nützlich sein. Ein TypeConverter oder ValueSerializer hat in der Regel mehr Kontext als eine Markuperweiterung, da sie einem bestimmten Zieltyp oder einer Zieleigenschaft zugeordnet sind und somit die situationale Gültigkeit in der Regel im Typsystem vorhersagbar ist. Andere Szenarien sind jedoch vorhanden. Im Folgenden finden Sie eine Liste einiger Szenarien, die entweder durch einen Typkonverter oder eine Markuperweiterung implementiert werden können:

  • Rufen Sie TargetObject die Instanzwerte anderer Eigenschaften auf diesem Objekt ab. Beachten Sie, dass ihre Behandlung hier möglicherweise robust für nicht festgelegte Werte sein muss, da die Verarbeitungsreihenfolge von XAML-Elementen im Zielobjekt nicht deterministisch sein kann.

  • Rufen Sie die Metadaten auf Typebene ab, oder überprüfen Sie TargetObject , ob erforderliche Schnittstellen vom Typ implementiert werden.

  • Rufen Sie TargetProperty die Metadaten der Eigenschaft ab.

Ein Szenario besteht darin, Informationen zu verwenden IProvideValueTarget , um zu beschränken, welche Objekte oder Eigenschaften durch die Markuperweiterung festgelegt werden dürfen.

Stellen Sie vor dem Versuch, den Dienst zu verwenden, sicher, dass der Dienst selbst nicht null vom relevanten Dienstanbieterparameter zurückgegeben wird, den Sie für den Kontext verwenden.

Wichtig

Beim Verwenden des Diensts ist es besonders wichtig, das objekt, auf das die Eigenschaft verwiesen wird, oder andere Objekte, auf die von TargetObject diesem Objekt verwiesen wird, zu ändern. Für WPF könnten diese Änderungen unerwartete Änderungen verursachen, die das WPF-Eigenschaftssystem ungültig machen würden.

Hinweis

Verwenden Sie nicht den Typ, TargetProperty um zu bestimmen, welchen genauen Typ eine Markuperweiterung oder ein Typkonverter zurückgeben sollte. Das ist keine bewährte Methode. Der Rückgabetyp sollte mit attributieren ( für Markuperweiterungen) oder Mustern (MarkupExtensionReturnTypeAttribute Klassenname des Typkonverters) übereinstimmen.

In früheren Versionen der .NET Framework ist diese Schnittstelle in der WPF-spezifischen Assembly WindowsBase vorhanden. In .NET Framework 4 IProvideValueTarget befindet sich die System.Xaml-Assembly. Weitere Informationen finden Sie unter Types Migrated from WPF to System.Xaml.

Hinweise zur WPF-Verwendung

Dieser Dienst unterstützt Frameworkfeatures wie die Bindung auf eine Abhängigkeitseigenschaft.

In WPF kann der dienst, der durch IProvideValueTarget Objekte und Eigenschaften dargestellt wird, für Situationen zurückgeben, in denen der Wert, der von einer Markuperweiterung oder einem Typkonverter zurückgegeben werden soll, vom Kontext abhängig ist.

IProvideValueTarget wird stark in der internen Implementierung von BindingBase, der Klasse verwendet, die den Bindungsmechanismus für Abhängigkeitseigenschaften in WPF implementiert.

Ein standardinterner Dienstanbieter für WPF implementiert IProvideValueTarget die Verwendung durch eine benutzerdefinierte Markuperweiterung oder einen Typkonverter. Das von dem internen WPF-Dienst gemeldete Objekt und Die von ihnen gemeldete IProvideValueTarget Eigenschaft kann nur vom internen WPF-Dienst festgelegt werden. Über diese Definition hinaus IProvideValueTarget würde es erforderlich sein, ihren eigenen Dienstanbieter für Markuperweiterungs- und Typkonverterverwendungen zu definieren, die mindestens die IProvideValueTarget und IXamlTypeResolver dienste implementiert, und das ist ein erweitertes Szenario, das hier nicht beschrieben wird.

Ein Nullwert für TargetProperty oder TargetObject bedeutet nicht unbedingt, dass eine Markuperweiterung oder ein Typkonverter nicht handeln kann, obwohl dies von Ihrer Implementierung abhängt. Ein Beispielfall, in dem die Werte IProvideValueTarget null sind, selbst wenn der Dienst verfügbar ist, wenn die Markuperweiterung in einer anderen Markuperweiterung geschachtelt ist, z. B. ein Binding. Eine Implementierung, die darauf basiert, sollte immer nach NULL-Werten suchen, wenn nur zum Zweck des Auslösens einer bestimmten Ausnahme, wenn dies IProvideValueTarget Ihr beabsichtigtes Design ist.

Eigenschaften

TargetObject

Ruft das Zielobjekt ab, das gemeldet wird.

TargetProperty

Ruft einen Bezeichner für die Zieleigenschaft ab, die gemeldet wird.

Gilt für:

Siehe auch