IProvideValueTarget IProvideValueTarget IProvideValueTarget IProvideValueTarget Interface

Definición

Representa un servicio que notifica las relaciones situacionales de objetos y propiedades para la evaluación de la extensión de marcado.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

Comentarios

IProvideValueTargetrepresenta un servicio que notifica la información relacionada con la estructura de propiedad de objeto que rodea a la que se invoca un convertidor de valores.IProvideValueTarget represents a service that reports information regarding the object-property structure surrounding where a value converter is invoked.

Los convertidores de tipos y las extensiones de IProvideValueTarget marcado pueden consultar como un servicio en el contexto del servicio proporcionado por un escritor de objetos XAML, cuando el escritor de objetos XAML invoca el comportamiento de conversión de valores.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. Para obtener más información, vea convertidores de tipos y extensiones de marcado para XAML y contextos de servicio disponibles para convertidores de tipos y extensiones de marcado.For more information, see Type Converters and Markup Extensions for XAML and Service Contexts Available to Type Converters and Markup Extensions.

Para las extensiones de marcado específicamente, un IProvideValueTarget escenario en el que resulta útil es determinar la validez del uso de la situación de la extensión de marcado.For markup extensions specifically, a scenario where IProvideValueTarget is useful is to determine the validity of your markup extension's situational usage. Por ejemplo, la extensión de marcado podría implementar un mecanismo de aplazamiento de valores, pero el uso de ese mecanismo solo podría ser adecuado si el objeto de destino es capaz de utilizar otros componentes del mecanismo de aplazamiento en tiempo de ejecución.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. Podría comprobar las características del sistema de tipos del objeto devuelto TargetObject como y asegurarse de que el objeto admite la técnica de aplazamiento.You could check the type system characteristics of the object returned as TargetObject and make sure that object supports your deferral technique. Si es así, la extensión de marcado devuelve un valor y, si no, la extensión de marcado produce una excepción que un escritor de objetos XAML recogerá como excepción interna.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. Un escenario similar garantiza que una propiedad determinada admita una funcionalidad, mediante la comprobación de las TargetPropertycaracterísticas del sistema de tipos de.A similar scenario is assuring that a particular property supports a capability, by checking type system characteristics of the TargetProperty.

IProvideValueTarget Aunque el nombre de la API puede implicar MarkupExtension.ProvideValueuna asociación con IProvideValueTarget , la información de la que se ha TypeConverter comunicado ValueSerializertambién puede ser útil para 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. TypeConverter OValueSerializer suelen tener más contexto que una extensión de marcado porque están dedicados a un tipo de destino determinado o a una propiedad de destino, por lo que la validez de la situación suele ser predecible en el sistema de tipos.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. Sin embargo, existen otros escenarios.However, other scenarios exist. A continuación se muestra una lista de algunos escenarios que se pueden implementar mediante un convertidor de tipos o una extensión de marcado:The following is a list of some scenarios that might be implemented by either a type converter or a markup extension:

  • Obtenga TargetObject para leer los valores de instancia de otras propiedades de ese objeto.Get TargetObject to read instance values of other properties on that object. Tenga en cuenta que el control aquí puede necesitar ser robusto para valores no definidos, porque el orden de procesamiento de los miembros XAML en el objeto de destino puede ser no determinista.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.

  • Obtenga TargetObject para leer metadatos de nivel de tipo o para comprobar que el tipo implementa las interfaces necesarias.Get TargetObject to read type-level metadata, or to verify that required interfaces are implemented by the type.

  • Obtener TargetProperty para leer metadatos de propiedad.Get TargetProperty to read property metadata.

Un escenario es usar IProvideValueTarget información para limitar qué objetos o propiedades se pueden establecer en la extensión de marcado.One scenario is to use IProvideValueTarget information to limit which objects or properties are permitted to be set by your markup extension.

Antes de intentar usar el servicio, asegúrese de que el propio servicio no null sea cuando lo devuelva el parámetro de proveedor de servicios correspondiente que está usando para el contexto.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

Al utilizar el servicio, es especialmente importante no modificar el objeto al que hace referencia la propiedad TargetObject u otros objetos a los que hace referencia dicho objeto.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. En el caso de WPF en concreto, estos cambios podrían provocar cambios inesperados que invalidaran el sistema de propiedades de WPF.For WPF specifically, these changes could cause unexpected changes that would invalidate the WPF property system.

Nota

No use el tipo de TargetProperty para determinar qué tipo preciso debe devolver una extensión de marcado o un convertidor de tipos.Do not use the type of TargetProperty to determine which precise type a markup extension or type converter should return. Esto no es un procedimiento recomendado.That is not a best practice. El tipo de valor devuelto debe ser coherente conMarkupExtensionReturnTypeAttribute la atribución (para las extensiones de marcado) o los patrones (nombre de clase del convertidor de tipos).Your return type should be consistent with attributing (MarkupExtensionReturnTypeAttribute for markup extensions) or patterns (class name of the type converter).

En las versiones anteriores de la .NET Framework, esta interfaz existía en el ensamblado específico de WPF WindowsBase.In previous versions of the .NET Framework, this interface existed in the WPF-specific assembly WindowsBase. En .NET Framework 4.NET Framework 4 ,IProvideValueTarget está en el ensamblado System. Xaml.In .NET Framework 4.NET Framework 4, IProvideValueTarget is in the System.Xaml assembly. Para obtener más información, consulta Types Migrated from WPF to System.Xaml.For more information, see Types Migrated from WPF to System.Xaml.

Notas de uso de WPFWPF Usage Notes

Este servicio admite características de .NET Framework como el enlace en una propiedad de dependencia.This service supports framework features such as binding on a dependency property.

En WPF, el servicio representado por IProvideValueTarget puede devolver objetos y propiedades para situaciones en las que el valor que se va a devolver desde una extensión de marcado o un convertidor de tipos depende del contexto.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.

IProvideValueTargetse aprovecha en gran medida en la implementación interna BindingBasede, la clase que implementa el mecanismo de enlace para las propiedades de dependencia en WPF.IProvideValueTarget is leveraged heavily in the internal implementation of BindingBase, the class that implements the binding mechanism for dependency properties in WPF.

Un proveedor de servicios interno predeterminado para WPF implementa IProvideValueTarget para el uso por parte de un convertidor de tipos o una extensión de marcado personalizada.A default internal service provider for WPF implements IProvideValueTarget for usage by a custom markup extension or type converter. El objeto y la propiedad que IProvideValueTarget notifique solo se pueden establecer mediante el servicio WPF interno.The object and property reported by IProvideValueTarget can only be set by the internal WPF service. A partir de esta definición de IProvideValueTarget cómo funciona, sería necesario definir su propio proveedor de servicios para la extensión de marcado y los usos del convertidor de tipos que IProvideValueTarget implementa IXamlTypeResolver al menos los servicios y, y que es una avanzada escenario que no se describe aquí.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 valor null para TargetProperty o TargetObject no necesariamente significa que no puede actuar un convertidor de tipos o una extensión de marcado, aunque depende de la implementación de.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 de ejemplo en el que IProvideValueTarget los valores de son NULL incluso si el servicio está disponible es si la extensión de marcado está anidada dentro de otra extensión Bindingde marcado, como.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. Una implementación que se basa en IProvideValueTarget siempre debe comprobar si hay valores NULL si solo tiene por objeto producir una excepción concreta, si es el diseño previsto.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.

Propiedades

TargetObject TargetObject TargetObject TargetObject

Obtiene el objeto de destino que se va a notificar.Gets the target object being reported.

TargetProperty TargetProperty TargetProperty TargetProperty

Obtiene un identificador de la propiedad de destino que se está notificando.Gets an identifier for the target property being reported.

Se aplica a

Consulte también: