IProvideValueTarget IProvideValueTarget IProvideValueTarget IProvideValueTarget Interface

Definizione

Rappresenta un servizio che indica le relazioni tra oggetti e proprietà situazionali per la valutazione dell'estensione di markup.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

Commenti

IProvideValueTargetrappresenta un servizio che fornisce informazioni sulla struttura della proprietà dell'oggetto che circonda la posizione in cui viene richiamato un convertitore di valori.IProvideValueTarget represents a service that reports information regarding the object-property structure surrounding where a value converter is invoked.

I convertitori di tipi e le estensioni di IProvideValueTarget markup possono eseguire query come servizio nel contesto del servizio fornito da un writer di oggetti XAML, quando il writer di oggetti XAML richiama il comportamento di conversione del valore.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. Per altre informazioni, vedere convertitori di tipi ed estensioni di markup per XAML e contesti di servizio disponibili per convertitori di tipi ed estensioni di markup.For more information, see Type Converters and Markup Extensions for XAML and Service Contexts Available to Type Converters and Markup Extensions.

Per le estensioni di markup in particolare, IProvideValueTarget uno scenario in cui è utile è determinare la validità dell'utilizzo situazionale dell'estensione di markup.For markup extensions specifically, a scenario where IProvideValueTarget is useful is to determine the validity of your markup extension's situational usage. Ad esempio, l'estensione di markup potrebbe implementare un meccanismo di rinvio del valore, ma l'utilizzo di tale meccanismo potrebbe essere appropriato solo se l'oggetto di destinazione è in grado di utilizzare altri componenti del meccanismo di rinvio in fase di esecuzione.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. È possibile controllare le caratteristiche del sistema di tipi dell'oggetto restituito TargetObject come e assicurarsi che l'oggetto supporti la tecnica di rinvio.You could check the type system characteristics of the object returned as TargetObject and make sure that object supports your deferral technique. 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.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. Uno scenario analogo garantisce che una particolare proprietà supporti una funzionalità, controllando le TargetPropertycaratteristiche del sistema di tipi di.A similar scenario is assuring that a particular property supports a capability, by checking type system characteristics of the TargetProperty.

Anche se il nome IProvideValueTarget dell'API potrebbe implicare MarkupExtension.ProvideValueun'associazione a, le IProvideValueTarget informazioni segnalate da possono essere TypeConverter utili ValueSerializeranche per un oggetto o.Although 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. Un TypeConverter oggetto ValueSerializer o in genere hanno più contesto di un'estensione di markup perché sono dedicati a un tipo di destinazione o a una proprietà di destinazione particolari, quindi la validità della situazione è in genere prevedibile nel sistema di tipi.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. Esistono tuttavia altri scenari.However, other scenarios exist. Di seguito è riportato un elenco di alcuni scenari che possono essere implementati da un convertitore di tipi o da un'estensione di markup:The following is a list of some scenarios that might be implemented by either a type converter or a markup extension:

  • Ottenere TargetObject per leggere i valori dell'istanza di altre proprietà nell'oggetto.Get TargetObject to read instance values of other properties on that object. Si noti che la gestione potrebbe dover essere affidabile per i valori non impostati, perché l'ordine di elaborazione dei membri XAML nell'oggetto di destinazione può essere non deterministico.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.

  • Ottenere TargetObject per leggere i metadati a livello di tipo o per verificare che le interfacce richieste siano implementate dal tipo.Get TargetObject to read type-level metadata, or to verify that required interfaces are implemented by the type.

  • Ottenere TargetProperty per leggere i metadati della proprietà.Get TargetProperty to read property metadata.

Uno scenario consiste nell'usare IProvideValueTarget le informazioni per limitare gli oggetti o le proprietà che possono essere impostati dall'estensione di markup.One scenario is to use IProvideValueTarget information to limit which objects or properties are permitted to be set by your markup extension.

Prima di provare a usare il servizio, verificare che il servizio stesso non null sia restituito dal parametro del provider di servizi pertinente usato per il contesto.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.

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 l'oggetto.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. Per WPF in particolare, queste modifiche potrebbero causare modifiche impreviste che potrebbero invalidare il sistema di proprietà WPF.For WPF specifically, these changes could cause unexpected changes that would invalidate the WPF property system.

Nota

Non usare il tipo di per TargetProperty determinare quale tipo preciso deve essere restituito da un'estensione di markup o un convertitore di tipi.Do not use the type of TargetProperty to determine which precise type a markup extension or type converter should return. Questa non è una procedura consigliata.That is not a best practice. Il tipo restituito deve essere coerente con l'attribuzioneMarkupExtensionReturnTypeAttribute (per le estensioni di markup) o con i modelli (nome della classe del convertitore di tipi).Your return type should be consistent with attributing (MarkupExtensionReturnTypeAttribute for markup extensions) or patterns (class name of the type converter).

Nelle versioni precedenti del .NET Framework, questa interfaccia era presente nell'assembly specifico di WPF WindowsBase.In previous versions of the .NET Framework, this interface existed in the WPF-specific assembly WindowsBase. In .NET Framework 4.NET Framework 4 ,IProvideValueTarget si trova nell'assembly System. XAML.In .NET Framework 4.NET Framework 4, IProvideValueTarget is in the System.Xaml assembly. Per altre informazioni, vedere Types Migrated from WPF to System.Xaml.For more information, see Types Migrated from WPF to System.Xaml.

Note sull'utilizzo di WPFWPF Usage Notes

Questo servizio supporta le funzionalità del Framework, ad esempio l'associazione di una proprietà di dipendenza.This service supports framework features such as binding on a dependency property.

In WPF, il servizio rappresentato da IProvideValueTarget può restituire oggetti e proprietà per le situazioni in cui il valore da restituire da un'estensione di markup o da un convertitore di tipi dipende dal contesto.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.

IProvideValueTargetviene sfruttato molto spesso nell'implementazione interna di BindingBase, la classe che implementa il meccanismo di associazione per le proprietà di dipendenza in WPF.IProvideValueTarget is leveraged heavily in the internal implementation of BindingBase, the class that implements the binding mechanism for dependency properties in WPF.

Un provider di servizi interno predefinito per WPF IProvideValueTarget implementa l'utilizzo da un'estensione di markup personalizzata o un convertitore di tipi.A default internal service provider for WPF implements IProvideValueTarget for usage by a custom markup extension or type converter. L'oggetto e la proprietà segnalati da IProvideValueTarget possono essere impostati solo dal servizio WPF interno.The object and property reported by IProvideValueTarget can only be set by the internal WPF service. Il superamento di questa definizione IProvideValueTarget del modo in cui funziona richiederebbe la definizione di un provider di servizi per l'estensione di markup e l'utilizzo di IProvideValueTarget convertitori di tipi che implementano almeno i servizi e IXamlTypeResolver , che è una funzionalità avanzata scenario non descritto di seguito.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.

Un valore null per TargetProperty o TargetObject non significa necessariamente che un'estensione di markup o un convertitore di tipi non può agire, sebbene ciò dipenda dall'implementazione di.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. Un caso di esempio in cui i IProvideValueTarget valori di sono null anche se il servizio è disponibile è se l'estensione di markup è annidata all'interno di un' Bindingaltra estensione di markup, ad esempio.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. Un'implementazione basata su IProvideValueTarget deve verificare sempre la presenza di valori null se solo allo scopo di generare un'eccezione specifica, se è la progettazione desiderata.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.

Proprietà

TargetObject TargetObject TargetObject TargetObject

Ottiene l'oggetto di destinazione da segnalare.Gets the target object being reported.

TargetProperty TargetProperty TargetProperty TargetProperty

Ottiene un identificatore per la proprietà di destinazione indicata.Gets an identifier for the target property being reported.

Si applica a

Vedi anche