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


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 также может быть полезной для или TypeConverterValueSerializer. ValueSerializer Или TypeConverter обычно имеет больше контекста, чем расширение разметки, так как они выделены конкретному целевому типу или целевому свойству, поэтому ситуационная допустимость обычно предсказуема в системе типов. Однако существуют другие сценарии. Ниже приведен список некоторых сценариев, которые могут быть реализованы преобразователем типов или расширением разметки:

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

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

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

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

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

Это важно

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

Замечание

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

В предыдущих версиях .NET Framework этот интерфейс существовал в сборке WPF для WindowsBase. В .NET Framework 4 IProvideValueTarget находится в сборке System.Xaml. Дополнительные сведения см. в разделе "Типы, перенесенные из WPF в System.Xaml".

Заметки об использовании WPF

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

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

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

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

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

Свойства

Имя Описание
TargetObject

Возвращает сообщаемый целевой объект.

TargetProperty

Возвращает идентификатор для сообщаемого целевого свойства.

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

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