Поделиться через


IProvideValueTarget Интерфейс

Определение

Представляет службу, которая сообщает информацию о ситуационных отношениях "объект-свойство" для оценки расширения разметки.

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

Комментарии

IProvideValueTarget представляет службу, которая сообщает сведения о структуре объект-свойство, окружающую среду, в которой вызывается преобразователь значений.

Преобразователи типов и расширения разметки могут запрашивать IProvideValueTarget как службу в контексте службы, предоставляемом модулем записи объектов XAML, когда модуль записи объектов XAML вызывает поведение преобразования значений. Дополнительные сведения см. в разделах Преобразователи типов и расширения разметки для XAML и Контексты служб, доступные для преобразователей типов и расширений разметки.

В частности, IProvideValueTarget для расширений разметки полезно определить допустимость ситуационного использования расширения разметки. Например, расширение разметки может реализовать механизм отсрочки значений, но использование этого механизма может быть целесообразно только в том случае, если целевой объект способен использовать другие компоненты механизма отсрочки во время выполнения. Можно проверка системные характеристики типа объекта, возвращаемого какTargetObject, и убедиться, что объект поддерживает метод отсрочки. Если это так, расширение разметки возвращает значение, а если нет, расширение разметки создает исключение, которое будет выбрано как внутреннее исключение средством записи объектов XAML. Аналогичный сценарий заключается в том, чтобы определенное свойство поддерживало возможность, проверяя характеристики TargetPropertyсистемы типов .

Хотя имя IProvideValueTarget API может подразумевать связь с MarkupExtension.ProvideValue, сведения, сообщаемые , IProvideValueTarget также могут быть полезны для TypeConverter или ValueSerializer. ValueSerializer Или TypeConverter обычно имеют больше контекста, чем расширение разметки, так как они выделены для определенного целевого типа или целевого свойства, и поэтому ситуационная достоверность обычно предсказуема в системе типов. Однако существуют и другие сценарии. Ниже приведен список некоторых сценариев, которые могут быть реализованы с помощью преобразователя типов или расширения разметки.

  • Получение TargetObject сведений о значениях экземпляра других свойств этого объекта. Обратите внимание, что обработка здесь может быть надежной для неустановленных значений, так как порядок обработки элементов XAML в целевом объекте может быть недетерминированным.

  • Выполните TargetObject чтение метаданных на уровне типа или убедитесь, что требуемые интерфейсы реализованы типом.

  • Получение TargetProperty сведений о метаданных свойства.

Один из сценариев заключается в использовании IProvideValueTarget сведений, чтобы ограничить, какие объекты или свойства могут быть заданы расширением разметки.

Прежде чем пытаться использовать службу, убедитесь, что сама служба не null возвращается соответствующим параметром поставщика служб, используемым для контекста.

Важно!

При использовании службы особенно важно не изменять объект, на который ссылается TargetObject свойство , или другие объекты, на которые ссылается этот объект. В частности, для WPF эти изменения могут привести к непредвиденным изменениям, которые делают систему свойств WPF недействительной.

Примечание

Не используйте тип , чтобы определить, какой точный TargetProperty тип должен возвращать расширение разметки или преобразователь типов. Это не рекомендуется. Возвращаемый тип должен соответствовать атрибуту (MarkupExtensionReturnTypeAttribute для расширений разметки) или шаблонам (имя класса преобразователя типов).

В предыдущих версиях платформа .NET Framework этот интерфейс существовал в сборке WindowsBase для WPF. В платформа .NET Framework 4 IProvideValueTarget находится в сборке System.Xaml. Для получения дополнительной информации см. Types Migrated from WPF to System.Xaml.

Примечания об использовании WPF

Эта служба поддерживает функции платформы, такие как привязка к свойству зависимостей.

В WPF служба, представленная , IProvideValueTarget может возвращать объекты и свойства в ситуациях, когда значение, возвращаемое из расширения разметки или преобразователя типов, зависит от контекста.

IProvideValueTarget в значительной степени используется во внутренней BindingBaseреализации класса , который реализует механизм привязки для свойств зависимостей в WPF.

Поставщик внутренних служб по умолчанию для WPF реализует IProvideValueTarget использование пользовательским расширением разметки или преобразователем типов. Объект и свойство, сообщаемые , IProvideValueTarget могут быть заданы только внутренней службой WPF. Чтобы выйти за рамки этого определения того, как IProvideValueTarget работает, потребуется определить собственный поставщик услуг для использования расширения разметки и преобразователя типов, который реализует по крайней мере IProvideValueTarget службы и IXamlTypeResolver , и это расширенный сценарий, который здесь не описан.

Значение NULL для TargetProperty или TargetObject не обязательно означает, что расширение разметки или преобразователь типов не может действовать, хотя это зависит от реализации. Пример, когда значения из IProvideValueTarget имеют значение NULL, даже если служба доступна, — это если расширение разметки вложено в другое расширение разметки, например Binding. Реализация, которая используетсяIProvideValueTarget, всегда должна проверка для значений NULL, если только с целью создания определенного исключения, если это ваша предполагаемая конструкция.

Свойства

TargetObject

Получает сообщаемый целевой объект.

TargetProperty

Получает идентификатор сообщаемого целевого свойства.

Применяется к

См. также раздел