IProvideValueTarget IProvideValueTarget IProvideValueTarget IProvideValueTarget Interface

定義

マークアップ拡張機能の評価に対する状況的なオブジェクトとプロパティの関係を報告するサービスを表します。Represents a service that reports situational object-property relationships for markup extension evaluation.

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

注釈

IProvideValueTarget 値コンバーターの起動が周囲オブジェクト プロパティ構造に関する情報を報告するサービスを表します。IProvideValueTarget represents a service that reports information regarding the object-property structure surrounding where a value converter is invoked.

型コンバーターおよびマークアップ拡張機能を照会できますIProvideValueTargetXAML オブジェクト ライターが値の変換動作を呼び出すと、XAML オブジェクト ライターによって提供されるサービスのコンテキストでサービスとして。Type converters and markup extensions can query for IProvideValueTarget as a service on the service context that is provided by a XAML object writer, when the XAML object writer invokes value conversion behavior. 詳細については、次を参照してください。型コンバーターと XAML のマークアップ拡張機能Service Contexts Available to Type Converters and Markup Extensionsします。For more information, see Type Converters and Markup Extensions for XAML and Service Contexts Available to Type Converters and Markup Extensions.

マークアップ拡張機能のシナリオでは具体的には、場所IProvideValueTargetに便利ですが、マークアップ拡張機能の状況把握の使用状況の有効性を判断することです。For markup extensions specifically, a scenario where IProvideValueTarget is useful is to determine the validity of your markup extension's situational usage. たとえば、マークアップ拡張機能が値の遅延のメカニズムを実装がそのメカニズムを使用して可能性があります、対象オブジェクトが実行時に、遅延のメカニズムの他のコンポーネントを使用できる場合に適しています。For example, your markup extension might implement a value deferral mechanism, but using that mechanism might only be appropriate if the target object is capable of using other components of your deferral mechanism at run time. として返されるオブジェクトの型システムの特性を調べることもできますTargetObjectし、そのオブジェクトは、遅延の手法をサポートしているかどうかを確認します。You could check the type system characteristics of the object returned as TargetObject and make sure that object supports your deferral technique. マークアップ拡張機能の値を返す場合は、マークアップ拡張機能はによって取得される内部例外として、XAML オブジェクト ライター例外がスローされない場合は、.If so, your markup extension returns a value, and if not, your markup extension throws an exception that will be picked up as an inner exception by a XAML object writer. 型システムの特性を確認して、特定のプロパティが、機能をサポートしているようなシナリオを確保、TargetPropertyします。A similar scenario is assuring that a particular property supports a capability, by checking type system characteristics of the TargetProperty.

API 名IProvideValueTargetこととの関連付けを示唆MarkupExtension.ProvideValue、によって報告された、情報IProvideValueTargetもに役に立ちます、TypeConverterまたはValueSerializerAlthough the API name IProvideValueTarget might imply an association with MarkupExtension.ProvideValue, the information reported by IProvideValueTarget can also be useful to a TypeConverter or ValueSerializer. ATypeConverterまたはValueSerializer型の特定のターゲットまたはターゲット プロパティの場合は、自分専用のために、マークアップ拡張機能をより詳細なコンテキストを通常があるし、状況把握の有効性が型システムでは、通常、予測可能なためです。A TypeConverter or ValueSerializer typically have more context than a markup extension because they are dedicated to a particular target type or target property, and thus the situational validity is usually predictable in the type system. ただし、他のシナリオがあります。However, other scenarios exist. 型コンバーターまたはマークアップ拡張機能によって実装される可能性をいくつかのシナリオの一覧を次には。The following is a list of some scenarios that might be implemented by either a type converter or a markup extension:

  • 取得TargetObjectそのオブジェクトの他のプロパティのインスタンスの値を読み取ります。Get TargetObject to read instance values of other properties on that object. 処理をここで必要とする可能性のターゲット オブジェクトの XAML メンバーの処理順序は非決定的であることができますので、設定されていない値は、堅牢であることに注意してください。Note that your handling here might need to be robust for unset values, because the processing order of XAML members on the target object can be nondeterministic.

  • 取得TargetObject型レベルのメタデータを読み取る、または型が必要なインターフェイスを実装することを確認します。Get TargetObject to read type-level metadata, or to verify that required interfaces are implemented by the type.

  • 取得TargetPropertyプロパティ メタデータを読み取る。Get TargetProperty to read property metadata.

1 つのシナリオは、使用するIProvideValueTargetについては、どのオブジェクトまたはプロパティは、マークアップ拡張機能によって設定する許可を制限します。One scenario is to use IProvideValueTarget information to limit which objects or properties are permitted to be set by your markup extension.

サービスを使用する前に、サービス自体ができないことを確認しますnullコンテキストを使用する、関連するサービス プロバイダーのパラメーターで返されるときにします。Before attempting to use the service, make sure that the service itself is not null when returned by the relevant service provider parameter you are using for context.

重要

によって参照されるオブジェクトを変更することがなく、特に重要ですが、サービスを使用する場合、TargetObjectプロパティ、またはそのオブジェクトによって参照される他のオブジェクト。When using the service, it is particularly important not to modify the object referenced by the TargetObject property, or other objects referenced by that object. WPF 具体的には、これらの変更により、予期しない変更、WPF プロパティ システムを無効にします。For WPF specifically, these changes could cause unexpected changes that would invalidate the WPF property system.

注意

型を使用しないでTargetProperty正確な種類をマークアップ拡張機能または型コンバーターを返す必要があります。Do not use the type of TargetProperty to determine which precise type a markup extension or type converter should return. ベスト プラクティスでないです。That is not a best practice. 戻り値の型の属性と一致する必要があります (MarkupExtensionReturnTypeAttributeのマークアップ拡張機能) またはパターン (型コンバーターのクラス名)。Your return type should be consistent with attributing (MarkupExtensionReturnTypeAttribute for markup extensions) or patterns (class name of the type converter).

.NET Framework の以前のバージョンでは、このインターフェイスは、WPF 固有の WindowsBase アセンブリに存在します。In previous versions of the .NET Framework, this interface existed in the WPF-specific assembly WindowsBase. .NET Framework 4.NET Framework 4IProvideValueTargetは System.Xaml アセンブリにします。In .NET Framework 4.NET Framework 4, IProvideValueTarget is in the System.Xaml assembly. 詳細については、「 Types Migrated from WPF to System.Xaml」を参照してください。For more information, see Types Migrated from WPF to System.Xaml.

WPF の使用上の注意WPF Usage Notes

このサービスは、依存関係プロパティのバインドなどのフレームワーク機能をサポートします。This service supports framework features such as binding on a dependency property.

WPF では、によって表されるサービスIProvideValueTargetマークアップ拡張機能または型コンバーターから返される値をコンテキストに依存する場所の状況のオブジェクトとプロパティを返すことができます。In WPF, the service represented by IProvideValueTarget can return objects and properties for situations where the value to return from a markup extension or type converter depends on context.

IProvideValueTarget 内部の実装で頻繁に利用してBindingBaseWPF の依存関係プロパティのバインディング機構を実装するクラス。IProvideValueTarget is leveraged heavily in the internal implementation of BindingBase, the class that implements the binding mechanism for dependency properties in WPF.

WPF 実装の既定の内部サービス プロバイダーIProvideValueTargetカスタム マークアップ拡張機能または型コンバーターが使用できます。A default internal service provider for WPF implements IProvideValueTarget for usage by a custom markup extension or type converter. によって報告されたオブジェクトとプロパティIProvideValueTargetWPF サービスの内部でのみ設定できます。The object and property reported by IProvideValueTarget can only be set by the internal WPF service. この方法の定義の先を行くIProvideValueTargetは少なくとも実装する独自のサービス プロバイダーのマークアップ拡張機能と型コンバーターの使用を定義する必要があります、IProvideValueTargetIXamlTypeResolverサービス、およびは高度なここで記述されていないシナリオです。Going beyond this definition of how IProvideValueTarget operates would require defining your own service provider for markup extension and type converter usages that implements at the very least the IProvideValueTarget and IXamlTypeResolver services, and that is an advanced scenario that is not described here.

Null 値をTargetPropertyまたはTargetObjectは必ずしもことは、マークアップ拡張機能または型コンバーターが機能しませんが、実装によって異なります。A null value for TargetProperty or TargetObject does not necessarily mean that a markup extension or type converter cannot act, although that depends on your implementation. 例のケースから値IProvideValueTargetが null の場合、サービスが使用可能な場合でも、マークアップ拡張機能が別のマークアップ拡張機能内でなど入れ子になったかどうか、Bindingします。An example case where the values from IProvideValueTarget are null even if the service is available is if your markup extension is nested within another markup extension, such as a Binding. 実装に依存しているIProvideValueTargetnull 値の場合は、その特定の例外をスローするために、意図した設計が、専用の場合に常に確認する必要があります。An implementation that relies on IProvideValueTarget should always check for null values if only for the purpose of throwing a specific exception, if that is your intended design.

プロパティ

TargetObject TargetObject TargetObject TargetObject

報告されるターゲット オブジェクトを取得します。Gets the target object being reported.

TargetProperty TargetProperty TargetProperty TargetProperty

報告されるターゲット プロパティの識別子を取得します。Gets an identifier for the target property being reported.

適用対象

こちらもご覧ください