IProvideValueTarget Interface

Definição

Representa um serviço que reporta relações situacionais objeto-propriedade para avaliação de extensão de marcação.

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

Observações

IProvideValueTarget representa um serviço que reporta informações sobre a estrutura objeto-propriedade em torno do local onde um conversor de valores é invocado.

Conversores de tipos e extensões de marcação podem consultar IProvideValueTarget como um serviço no contexto de serviço fornecido por um escritor de objetos XAML, quando o escritor de objetos XAML invoca o comportamento de conversão de valor. Para mais informações, consulte Conversores de Tipos e Extensões de Marcação para XAMLe Contextos de Serviço Disponíveis para Conversores de Tipos e Extensões de Marcação.

Para extensões de marcação especificamente, um cenário útil IProvideValueTarget é determinar a validade do uso situacional da extensão de marcação. Por exemplo, a sua extensão de marcação pode implementar um mecanismo de diferimento de valor, mas usar esse mecanismo só pode ser apropriado se o objeto alvo for capaz de usar outros componentes do seu mecanismo de diferimento em tempo de execução. Podes verificar as características do sistema de tipos do objeto devolvido como TargetObject e garantir que esse objeto suporta a tua técnica de adiamento. Se sim, a extensão de marcação devolve um valor e, caso contrário, a extensão de marcação gera uma exceção que será captada como exceção interna por um escritor de objetos XAML. Um cenário semelhante é garantir que uma propriedade particular suporta uma capacidade, verificando as características do sistema de tipos do TargetProperty.

Embora o nome IProvideValueTarget da API possa implicar uma associação com MarkupExtension.ProvideValue, a informação reportada por IProvideValueTarget pode também ser útil para um TypeConverter ou ValueSerializer. A TypeConverter ou ValueSerializer normalmente têm mais contexto do que uma extensão de marcação porque são dedicados a um tipo ou propriedade de alvo particular, e assim a validade situacional é geralmente previsível no sistema de tipos. No entanto, existem outros cenários. Segue-se uma lista de alguns cenários que podem ser implementados por um conversor de tipos ou por uma extensão de marcação:

  • Pode TargetObject ler os valores das instâncias de outras propriedades nesse objeto. Note que o seu tratamento aqui pode precisar de ser robusto para valores não definidos, porque a ordem de processamento dos membros XAML no objeto alvo pode ser não determinística.

  • Ler TargetObject metadados ao nível do tipo, ou verificar se as interfaces necessárias são implementadas pelo tipo.

  • Pode TargetProperty ler metadados da propriedade.

Um cenário é usar IProvideValueTarget a informação para limitar que objetos ou propriedades podem ser definidos pela sua extensão de marcação.

Antes de tentar usar o serviço, certifique-se de que o serviço em si não null é devolvido ao ser devolvido pelo parâmetro relevante do fornecedor de serviço que está a usar para contexto.

Importante

Ao utilizar o serviço, é particularmente importante não modificar o objeto referenciado pela TargetObject propriedade, nem outros objetos referenciados por esse objeto. Para o WPF especificamente, estas alterações poderiam causar alterações inesperadas que invalidariam o sistema de propriedades do WPF.

Note

Não use o tipo de TargetProperty para determinar qual o tipo exato que uma extensão de marcação ou conversor de tipos deve devolver. Isso não é uma boa prática. O seu tipo de retorno deve ser consistente com atribuição (MarkupExtensionReturnTypeAttribute para extensões de marcação) ou padrões (nome de classe do conversor de tipos).

Em versões anteriores do .NET Framework, esta interface existia no WindowsBase assembly específico do WPF. Na .NET Framework 4, IProvideValueTarget está na assembly System.Xaml. Para mais informações, veja Tipos Migrados de WPF para System.Xaml.

Notas de uso do WPF

Este serviço suporta funcionalidades do framework, como binding numa propriedade de dependência.

Em WPF, o serviço representado por IProvideValueTarget pode devolver objetos e propriedades para situações em que o valor a devolver de uma extensão de marcação ou conversor de tipos depende do contexto.

IProvideValueTarget é fortemente aproveitado na implementação interna de BindingBase, a classe que implementa o mecanismo de ligação para propriedades de dependência em WPF.

Um fornecedor de serviços interno predefinido para WPF implementa IProvideValueTarget para utilização por uma extensão de marcação personalizada ou conversor de tipos. O objeto e a propriedade reportados por IProvideValueTarget só podem ser definidos pelo serviço interno de WPF. Ir além desta definição de como IProvideValueTarget opera exigiria definir o seu próprio fornecedor de serviços para a extensão de marcação e os usos do conversor de tipos que implemente, pelo menos, os IProvideValueTarget serviços and IXamlTypeResolver , e esse é um cenário avançado que não é descrito aqui.

Um valor nulo para TargetProperty ou TargetObject não significa necessariamente que uma extensão de marcação ou conversor de tipos não possa atuar, embora isso dependa da sua implementação. Um caso de exemplo em que os valores de IProvideValueTarget são nulos mesmo que o serviço esteja disponível é se a sua extensão de marcação estiver aninhada dentro de outra extensão de marcação, como um Binding. Uma implementação em IProvideValueTarget que se baseie deve sempre verificar valores nulos, nem que seja apenas para lançar uma exceção específica, se esse for o seu design pretendido.

Propriedades

Name Description
TargetObject

Recebe o objeto alvo que está a ser reportado.

TargetProperty

Obtém um identificador para a propriedade alvo que está a ser reportada.

Aplica-se a

Ver também