IProvideValueTarget インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
マークアップ拡張機能の評価に対する状況的なオブジェクトとプロパティの関係を報告するサービスを表します。
public interface class IProvideValueTarget
public interface IProvideValueTarget
type IProvideValueTarget = interface
Public Interface IProvideValueTarget
注釈
IProvideValueTarget は、値コンバーターが呼び出される場所を囲むオブジェクト プロパティ構造に関する情報を報告するサービスを表します。
型コンバーターとマークアップ拡張機能は、XAML オブジェクト ライターが値変換動作を呼び出すときに、XAML オブジェクト ライターによって提供されるサービス コンテキストでサービスとしてクエリ IProvideValueTarget を実行できます。 詳細については、「型コンバーターおよびマークアップ拡張機能」を参照してください。
マークアップ拡張機能の場合、特に役立つシナリオ IProvideValueTarget は、マークアップ拡張機能の状況の使用方法の有効性を判断することです。 たとえば、マークアップ拡張機能は値遅延メカニズムを実装する場合がありますが、そのメカニズムの使用は、ターゲット オブジェクトが実行時に遅延メカニズムの他のコンポーネントを使用できる場合にのみ適している場合があります。 返される TargetObject オブジェクトの型システム特性を確認し、オブジェクトが遅延手法をサポートしていることを確認できます。 その場合、マークアップ拡張機能は値を返します。値が返されない場合、マークアップ拡張機能は XAML オブジェクト ライターによって内部例外として取得される例外をスローします。 同様のシナリオでは、特定のプロパティが機能をサポートしていることを保証します。このプロパティの型システム特性を TargetProperty確認します。
API 名 IProvideValueTarget は関連付 MarkupExtension.ProvideValueけを意味する可能性がありますが、報告される IProvideValueTarget 情報は TypeConverter 、 または ValueSerializer. 特定の TypeConverter ターゲット型または 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 実装しており、ここでは説明されていない高度なシナリオです。
null 値TargetPropertyTargetObjectは、マークアップ拡張または型コンバーターが動作できないことを意味しますが、これは実装によって異なります。 サービスを使用できる場合でも、値 IProvideValueTarget が null になる例は、マークアップ拡張機能が別のマークアップ拡張機能内に入れ子になっている場合です。たとえば Binding、. 依存する実装では、特定の IProvideValueTarget 例外をスローする目的でのみ、意図した設計である場合にのみ、常に null 値をチェックする必要があります。
プロパティ
| TargetObject |
報告されるターゲット オブジェクトを取得します。 |
| TargetProperty |
報告されるターゲット プロパティの識別子を取得します。 |