次の方法で共有


IProvideValueTarget インターフェイス

定義

マークアップ拡張機能の評価に対する状況的なオブジェクトとプロパティの関係を報告するサービスを表します。

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

注釈

IProvideValueTarget は、値コンバーターが呼び出される場所を囲むオブジェクト プロパティ構造に関する情報を報告するサービスを表します。

型コンバーターとマークアップ拡張機能は、XAML オブジェクト ライターが値変換動作を呼び出すときに、XAML オブジェクト ライターによって提供されるサービス コンテキストでサービスとしてクエリ IProvideValueTarget を実行できます。 詳細については、「型コンバーターと XAML のマークアップ拡張機能」および「型コンバーターとマークアップ拡張機能で使用できるサービス コンテキスト」を参照してください。

マークアップ拡張機能の場合、特に便利なシナリオ IProvideValueTarget は、マークアップ拡張機能の状況での使用の有効性を判断することです。 たとえば、マークアップ拡張機能で値の遅延メカニズムが実装される場合がありますが、そのメカニズムを使用することは、ターゲット オブジェクトが実行時に遅延メカニズムの他のコンポーネントを使用できる場合にのみ適している可能性があります。 として返されるTargetObjectオブジェクトの型システム特性をチェックし、オブジェクトが遅延手法をサポートしていることを確認できます。 その場合、マークアップ拡張機能は値を返し、そうでない場合、マークアップ拡張機能は XAML オブジェクト ライターによって内部例外として取得される例外をスローします。 同様のシナリオでは、 の型システム特性を確認することで、特定の TargetPropertyプロパティで機能がサポートされることを保証します。

API 名IProvideValueTargetは とのMarkupExtension.ProvideValue関連付けを意味する可能性がありますが、 によってIProvideValueTarget報告される情報は、 または ValueSerializerにも役立ちますTypeConverterTypeConverterまたは ValueSerializer は、通常、マークアップ拡張よりも多くのコンテキストを持ちます。これは、特定のターゲット型またはターゲット プロパティ専用であるため、通常、状況の有効性は型システムで予測可能です。 ただし、他のシナリオも存在します。 型コンバーターまたはマークアップ拡張機能によって実装される可能性がある一部のシナリオの一覧を次に示します。

  • TargetObjectそのオブジェクトの他のプロパティのインスタンス値を読み取ります。 ターゲット オブジェクトの XAML メンバーの処理順序は非決定的であるため、ここでの処理は未設定の値に対して堅牢である必要があることに注意してください。

  • TargetObject型レベルのメタデータを読み取るか、必要なインターフェイスが 型によって実装されていることを確認します。

  • TargetPropertyプロパティメタデータを読み取ります。

1 つのシナリオでは、情報を使用 IProvideValueTarget して、マークアップ拡張機能によって設定できるオブジェクトまたはプロパティを制限します。

サービスを使用する前に、コンテキストに使用している関連するサービス プロバイダー パラメーターによってサービス自体が返されない null かどうかを確認します。

重要

サービスを使用する場合は、プロパティによって参照されるオブジェクト、またはそのオブジェクトによって参照される他のオブジェクトを TargetObject 変更しないことが特に重要です。 特に WPF の場合、これらの変更によって予期しない変更が発生し、WPF プロパティ システムが無効になる可能性があります。

注意

の型 TargetProperty を使用して、マークアップ拡張機能または型コンバーターが返す正確な型を決定しないでください。 これはベスト プラクティスではありません。 戻り値の型は、属性付け (MarkupExtensionReturnTypeAttribute マークアップ拡張の場合) またはパターン (型コンバーターのクラス名) と一致している必要があります。

以前のバージョンの.NET Frameworkでは、このインターフェイスは WPF 固有のアセンブリ WindowsBase に存在しました。 .NET Framework 4 では、 IProvideValueTarget は System.Xaml アセンブリ内にあります。 詳細については、「 Types Migrated from WPF to System.Xaml」を参照してください。

WPF の使用上の注意

このサービスでは、依存関係プロパティに対するバインドなどのフレームワーク機能がサポートされています。

WPF では、 によって IProvideValueTarget 表されるサービスは、マークアップ拡張機能または型コンバーターから返す値がコンテキストに依存する状況で、オブジェクトとプロパティを返すことができます。

IProvideValueTarget は、WPF の依存関係プロパティの BindingBaseバインド メカニズムを実装する クラス の内部実装で大きく活用されています。

WPF の既定の内部サービス プロバイダーは、 IProvideValueTarget カスタム マークアップ拡張機能または型コンバーターで使用するために を実装します。 によって IProvideValueTarget 報告されるオブジェクトとプロパティは、内部 WPF サービスによってのみ設定できます。 この操作方法 IProvideValueTarget の定義を超えると、マークアップ拡張と型コンバーターの使用に対して独自のサービス プロバイダーを定義する必要があります。これは、少なくとも IProvideValueTarget および IXamlTypeResolver サービスを実装しており、ここでは説明されていない高度なシナリオです。

または TargetObjectTargetProperty null 値は、マークアップ拡張または型コンバーターが動作できないことを必ずしも意味するわけではありませんが、これは実装によって異なります。 サービスが使用可能な場合でも、 の IProvideValueTarget 値が null の場合の例は、マークアップ拡張機能が などの別のマークアップ拡張機能内に入れ子になっている場合です Binding。 に依存する実装は、特定のIProvideValueTarget例外をスローする目的でのみ null 値をチェックする必要があります (意図した設計の場合)。

プロパティ

TargetObject

報告されるターゲット オブジェクトを取得します。

TargetProperty

報告されるターゲット プロパティの識別子を取得します。

適用対象

こちらもご覧ください