Compartilhar via


IProvideValueTarget Interface

Definição

Representa um serviço que relata os relacionamentos situacionais propriedade/objeto para avaliação da extensão de marcação.

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

Comentários

IProvideValueTarget representa um serviço que relata informações sobre a estrutura object-property em torno de onde um conversor de valor é invocado.

Conversores de tipo e extensões de marcação podem consultar IProvideValueTarget como um serviço no contexto de serviço fornecido por um gravador de objeto XAML, quando o gravador de objeto XAML invoca o comportamento de conversão de valor. Para obter mais informações, consulte Conversores de tipo e extensões de marcação para XAML e Contextos de serviço disponíveis para conversores de tipo e extensões de marcação.

Especificamente para extensões de marcação, um cenário em IProvideValueTarget que é útil é determinar a validade do uso situacional da extensão de marcação. Por exemplo, sua extensão de marcação pode implementar um mecanismo de adiamento de valor, mas usar esse mecanismo só poderá ser apropriado se o objeto de destino for capaz de usar outros componentes do mecanismo de adiamento em tempo de execução. Você pode marcar as características do sistema de tipo do objeto retornado como TargetObject e garantir que o objeto dê suporte à técnica de adiamento. Nesse caso, a extensão de marcação retorna um valor e, caso contrário, sua extensão de marcação gera uma exceção que será selecionada como uma exceção interna por um gravador de objeto XAML. Um cenário semelhante é assegurar que uma propriedade específica dê suporte a uma funcionalidade, verificando as características do sistema de tipo do TargetProperty.

Embora o nome IProvideValueTarget da API possa implicar uma associação com MarkupExtension.ProvideValue, as informações relatadas por IProvideValueTarget também podem ser úteis para um TypeConverter ou ValueSerializer. Um TypeConverter ou ValueSerializer normalmente têm mais contexto do que uma extensão de marcação porque são dedicados a um determinado tipo de destino ou propriedade de destino e, portanto, a validade situacional geralmente é previsível no sistema de tipos. No entanto, existem outros cenários. Veja a seguir uma lista de alguns cenários que podem ser implementados por um conversor de tipo ou uma extensão de marcação:

  • Comece TargetObject a ler valores de instância de outras propriedades nesse objeto. Observe que sua manipulação aqui pode precisar ser robusta para valores não definidos, pois a ordem de processamento de membros XAML no objeto de destino pode ser não determinística.

  • Leia TargetObject os metadados no nível do tipo ou verifique se as interfaces necessárias são implementadas pelo tipo.

  • Comece TargetProperty a ler metadados de propriedade.

Um cenário é usar IProvideValueTarget informações para limitar quais objetos ou propriedades têm permissão para serem definidos pela extensão de marcação.

Antes de tentar usar o serviço, verifique se o serviço em si não null é quando retornado pelo parâmetro do provedor de serviços relevante que você está usando para o contexto.

Importante

Ao usar o serviço, é particularmente importante não modificar o objeto referenciado pela TargetObject propriedade ou outros objetos referenciados por esse objeto. Especificamente para o WPF, essas alterações podem causar alterações inesperadas que invalidariam o sistema de propriedades do WPF.

Observação

Não use o tipo de TargetProperty para determinar qual tipo preciso uma extensão de marcação ou conversor de tipo deve retornar. Isso não é uma melhor prática. Seu tipo de retorno deve ser consistente com a atribuição (MarkupExtensionReturnTypeAttribute para extensões de marcação) ou padrões (nome de classe do conversor de tipo).

Em versões anteriores do .NET Framework, essa interface existia no assembly específico do WPF WindowsBase. No .NET Framework 4, IProvideValueTarget está no assembly System.Xaml. Para obter mais informações, consulte Tipos migrados do WPF para System.Xaml.

Notas de uso do WPF

Esse serviço dá suporte a recursos de estrutura, como associação em uma propriedade de dependência.

No WPF, o serviço representado por IProvideValueTarget pode retornar objetos e propriedades para situações em que o valor a ser retornado de uma extensão de marcação ou conversor de tipo depende do contexto.

IProvideValueTarget é muito utilizada na implementação interna do BindingBase, a classe que implementa o mecanismo de associação para propriedades de dependência no WPF.

Um provedor de serviços interno padrão para WPF implementa IProvideValueTarget para uso por uma extensão de marcação personalizada ou conversor de tipo. O objeto e a propriedade relatados por IProvideValueTarget só podem ser definidos pelo serviço WPF interno. Ir além dessa definição de como IProvideValueTarget opera exigiria a definição de seu próprio provedor de serviços para usos de conversor de tipo e extensão de marcação que implementa, no mínimo, os IProvideValueTarget serviços e IXamlTypeResolver , e esse é um cenário avançado que não está descrito aqui.

Um valor nulo para TargetProperty ou TargetObject não significa necessariamente que uma extensão de marcação ou conversor de tipo não pode agir, embora isso dependa de sua implementação. Um caso de exemplo em que os valores de IProvideValueTarget são nulos mesmo se o serviço estiver disponível é se a extensão de marcação estiver aninhada em outra extensão de marcação, como um Binding. Uma implementação que depende IProvideValueTarget sempre deve marcar para valores nulos, se apenas para fins de gerar uma exceção específica, se esse for o design pretendido.

Propriedades

TargetObject

Obtém o objeto de destino que está sendo relatado.

TargetProperty

Obtém um identificador para a propriedade de destino está sendo relatada.

Aplica-se a

Confira também