IProvideValueTarget Interfaccia

Definizione

Rappresenta un servizio che indica le relazioni tra oggetti e proprietà situazionali per la valutazione dell'estensione di markup.

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

Commenti

IProvideValueTarget rappresenta un servizio che segnala le informazioni relative alla struttura della proprietà oggetto che circonda la posizione in cui viene richiamato un convertitore di valori.

I convertitori di tipi e le estensioni di markup possono eseguire query su IProvideValueTarget come servizio nel contesto del servizio fornito da un writer di oggetti XAML, quando il writer di oggetti XAML richiama il comportamento di conversione dei valori. Per altre informazioni, vedi Convertitori di tipi ed estensioni di markup per contesti XAML e di servizio disponibili per convertitori di tipi ed estensioni di markup.

Per le estensioni di markup in particolare, uno scenario in cui IProvideValueTarget è utile è determinare la validità dell'utilizzo situazione dell'estensione di markup. Ad esempio, l'estensione di markup potrebbe implementare un meccanismo di differizione dei valori, ma l'uso di tale meccanismo potrebbe essere appropriato solo se l'oggetto di destinazione è in grado di usare altri componenti del meccanismo di rinvio in fase di esecuzione. È possibile controllare le caratteristiche di sistema del tipo dell'oggetto restituito come TargetObject e assicurarsi che l'oggetto supporti la tecnica di differizione. In tal caso, l'estensione di markup restituisce un valore e, in caso contrario, l'estensione di markup genera un'eccezione che verrà prelevata come eccezione interna da un writer di oggetti XAML. Uno scenario simile garantisce che una determinata proprietà supporti una funzionalità, controllando le caratteristiche del sistema dei tipi di TargetProperty.

Anche se il nome IProvideValueTarget dell'API può implicare un'associazione con MarkupExtension.ProvideValue, le informazioni segnalate da IProvideValueTarget possono essere utili anche per un TypeConverter oggetto o ValueSerializer. Un TypeConverter oggetto o ValueSerializer in genere ha più contesto rispetto a un'estensione di markup perché è dedicato a un particolare tipo di destinazione o proprietà di destinazione e pertanto la validità situazione è in genere prevedibile nel sistema dei tipi. Esistono tuttavia altri scenari. Di seguito è riportato un elenco di alcuni scenari che potrebbero essere implementati da un convertitore di tipi o da un'estensione di markup:

  • Ottiene TargetObject per leggere i valori dell'istanza di altre proprietà su tale oggetto. Tieni presente che la gestione qui potrebbe essere affidabile per i valori non distribuiti, perché l'ordine di elaborazione dei membri XAML nell'oggetto di destinazione può essere non deterministico.

  • Consente TargetObject di leggere i metadati a livello di tipo o di verificare che le interfacce necessarie siano implementate dal tipo.

  • Ottenere TargetProperty per leggere i metadati delle proprietà.

Uno scenario consiste nell'usare IProvideValueTarget le informazioni per limitare gli oggetti o le proprietà che possono essere impostati dall'estensione di markup.

Prima di tentare di usare il servizio, assicurarsi che il servizio stesso non null venga restituito dal parametro del provider di servizi pertinente usato per il contesto.

Importante

Quando si usa il servizio, è particolarmente importante non modificare l'oggetto a cui fa riferimento la TargetObject proprietà o altri oggetti a cui fa riferimento tale oggetto. Per WPF in particolare, queste modifiche potrebbero causare modifiche impreviste che invalidano il sistema di proprietà WPF.

Nota

Non utilizzare il tipo di TargetProperty per determinare quale tipo preciso deve restituire un'estensione di markup o un convertitore di tipi. Non è una procedura consigliata. Il tipo restituito deve essere coerente con l'attributo (MarkupExtensionReturnTypeAttribute per le estensioni di markup) o i modelli (nome della classe del convertitore di tipi).

Nelle versioni precedenti di .NET Framework, questa interfaccia esisteva nell'assembly specifico di WPF WindowsBase. In .NET Framework 4 IProvideValueTarget si trova nell'assembly System.Xaml. Per altre informazioni, vedere Types Migrated from WPF to System.Xaml.

Note sull'utilizzo di WPF

Questo servizio supporta funzionalità del framework, ad esempio l'associazione a una proprietà di dipendenza.

In WPF il servizio rappresentato da IProvideValueTarget può restituire oggetti e proprietà per situazioni in cui il valore da restituire da un'estensione di markup o un convertitore di tipi dipende dal contesto.

IProvideValueTarget viene sfruttato molto nell'implementazione interna di BindingBase, la classe che implementa il meccanismo di associazione per le proprietà di dipendenza in WPF.

Un provider di servizi interno predefinito per WPF implementa IProvideValueTarget per l'utilizzo da un'estensione di markup personalizzata o un convertitore di tipi. L'oggetto e la proprietà segnalati da IProvideValueTarget possono essere impostati solo dal servizio WPF interno. Oltre a questa definizione di funzionamento IProvideValueTarget , è necessario definire il proprio provider di servizi per l'estensione di markup e i convertitori di tipi che implementano almeno i IProvideValueTarget servizi e IXamlTypeResolver , ed è uno scenario avanzato che non è descritto qui.

Un valore Null per TargetProperty o TargetObject non significa necessariamente che un'estensione di markup o un convertitore di tipi non possa agire, anche se dipende dall'implementazione. Un esempio in cui i valori di IProvideValueTarget sono Null anche se il servizio è disponibile è se l'estensione di markup è annidata all'interno di un'altra estensione di markup, ad esempio .Binding Un'implementazione che si basa su IProvideValueTarget deve sempre verificare la presenza di valori Null se solo allo scopo di generare un'eccezione specifica, se questa è la progettazione desiderata.

Proprietà

TargetObject

Ottiene l'oggetto di destinazione da segnalare.

TargetProperty

Ottiene un identificatore per la proprietà di destinazione indicata.

Si applica a

Vedi anche