Compartir a través de


IProvideValueTarget Interfaz

Definición

Representa un servicio que notifica las relaciones situacionales de objetos y propiedades para la evaluación de la extensión de marcado.

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

Comentarios

IProvideValueTarget representa un servicio que notifica información sobre la estructura de propiedad del objeto que rodea donde se invoca un convertidor de valores.

Los convertidores de tipos y las extensiones de marcado pueden consultar IProvideValueTarget como servicio en el contexto de servicio proporcionado por un escritor de objetos XAML, cuando el escritor de objetos XAML invoca el comportamiento de conversión de valores. Para obtener más información, consulta Convertidores de tipos y extensiones de marcado para xaml y contextos de servicio disponibles para convertidores de tipos y extensiones de marcado.

En el caso de las extensiones de marcado específicamente, un escenario en IProvideValueTarget el que resulta útil es determinar la validez del uso situacional de la extensión de marcado. Por ejemplo, la extensión de marcado podría implementar un mecanismo de aplazamiento de valores, pero usar ese mecanismo solo podría ser adecuado si el objeto de destino es capaz de usar otros componentes del mecanismo de aplazamiento en tiempo de ejecución. Puede comprobar las características del sistema de tipos del objeto devuelto como TargetObject y asegurarse de que el objeto admite la técnica de aplazamiento. Si es así, la extensión de marcado devuelve un valor y, si no es así, la extensión de marcado produce una excepción que un escritor de objetos XAML seleccionará como una excepción interna. Un escenario similar es asegurarse de que una propiedad determinada admite una funcionalidad, comprobando las características del sistema de tipos de .TargetProperty

Aunque el nombre IProvideValueTarget de la API puede implicar una asociación con MarkupExtension.ProvideValue, la información notificada por IProvideValueTarget también puede ser útil para o TypeConverterValueSerializer. O TypeConverterValueSerializer normalmente tienen más contexto que una extensión de marcado porque están dedicadas a un tipo de destino o propiedad de destino determinado, y por lo tanto, la validez situacional suele ser predecible en el sistema de tipos. Sin embargo, existen otros escenarios. A continuación se muestra una lista de algunos escenarios que pueden implementarse mediante un convertidor de tipos o una extensión de marcado:

  • Obtenga TargetObject para leer los valores de instancia de otras propiedades en ese objeto. Ten en cuenta que es posible que el control aquí tenga que ser sólido para valores sin establecer, ya que el orden de procesamiento de los miembros XAML en el objeto de destino puede ser no determinista.

  • Obtenga TargetObject para leer los metadatos de nivel de tipo o para comprobar que el tipo implementa las interfaces necesarias.

  • Obtenga TargetProperty para leer los metadatos de propiedad.

Un escenario consiste en usar IProvideValueTarget información para limitar qué objetos o propiedades se pueden establecer mediante la extensión de marcado.

Antes de intentar usar el servicio, asegúrese de que el propio servicio no null lo devuelve el parámetro del proveedor de servicios correspondiente que está usando para el contexto.

Importante

Al usar el servicio, es especialmente importante no modificar el objeto al que hace referencia la TargetObject propiedad u otros objetos a los que hace referencia ese objeto. En concreto, para WPF, estos cambios podrían provocar cambios inesperados que invalidarían el sistema de propiedades de WPF.

Nota

No use el tipo de para determinar qué tipo preciso debe devolver una extensión de TargetProperty marcado o convertidor de tipos. No es un procedimiento recomendado. El tipo de valor devuelto debe ser coherente con la atribución (MarkupExtensionReturnTypeAttribute para las extensiones de marcado) o los patrones (nombre de clase del convertidor de tipos).

En versiones anteriores de .NET Framework, esta interfaz existía en el ensamblado específico de WPF WindowsBase. En .NET Framework 4, IProvideValueTarget está en el ensamblado System.Xaml. Para obtener más información, consulta Types Migrated from WPF to System.Xaml.

Notas de uso de WPF

Este servicio admite características de marco, como el enlace en una propiedad de dependencia.

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.

IProvideValueTarget se aprovecha en gran medida en la implementación interna de BindingBase, la clase que implementa el mecanismo de enlace para las propiedades de dependencia en WPF.

Un proveedor de servicios interno predeterminado para WPF implementa IProvideValueTarget para su uso mediante una extensión de marcado personalizado o un convertidor de tipos. El servicio WPF interno solo puede establecer el objeto y la propiedad notificados por IProvideValueTarget . Además de esta definición de cómo IProvideValueTarget funciona, sería necesario definir su propio proveedor de servicios para usos de extensiones de marcado y convertidor de tipos que implementan al menos los IProvideValueTarget servicios y IXamlTypeResolver , y es un escenario avanzado que no se describe aquí.

Un valor NULL para TargetProperty o TargetObject no significa necesariamente que una extensión de marcado o un convertidor de tipos no pueda actuar, aunque eso depende de la implementación. Un caso de ejemplo en el que los valores de IProvideValueTarget son NULL incluso si el servicio está disponible es si la extensión de marcado está anidada dentro de otra extensión de marcado, como .Binding Una implementación en la que se basa IProvideValueTarget siempre debe comprobar si hay valores NULL si solo con el fin de iniciar una excepción específica, si es el diseño previsto.

Propiedades

TargetObject

Obtiene el objeto de destino que se va a notificar.

TargetProperty

Obtiene un identificador de la propiedad de destino que se está notificando.

Se aplica a

Consulte también