IProvideValueTarget Интерфейс

Определение

Представляет службу, которая сообщает информацию о ситуационных отношениях "объект-свойство" для оценки расширения разметки.Represents a service that reports situational object-property relationships for markup extension evaluation.

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

Комментарии

IProvideValueTarget представляет службу, которая сообщает сведения о структуре свойств объекта, окружающей метод, в котором вызывается преобразователь значений.IProvideValueTarget represents a service that reports information regarding the object-property structure surrounding where a value converter is invoked.

Преобразователи типов и расширения разметки могут запрашивать IProvideValueTarget как службу в контексте службы, предоставляемом средством записи объектов XAML, когда средство записи объектов XAML вызывает поведение преобразования значения.Type converters and markup extensions can query for IProvideValueTarget as a service on the service context that is provided by a XAML object writer, when the XAML object writer invokes value conversion behavior. Дополнительные сведения см. в разделе преобразователи типов и расширения разметки для XAML и контекстов служб, доступных для преобразователей типов и расширений разметки.For more information, see Type Converters and Markup Extensions for XAML and Service Contexts Available to Type Converters and Markup Extensions.

В частности, для расширений разметки рекомендуется IProvideValueTarget определить допустимость использования расширения разметки.For markup extensions specifically, a scenario where IProvideValueTarget is useful is to determine the validity of your markup extension's situational usage. Например, расширение разметки может реализовать механизм отсрочки значения, но использование этого механизма может быть уместным только в том случае, если целевой объект способен использовать другие компоненты механизма отсрочки во время выполнения.For example, your markup extension might implement a value deferral mechanism, but using that mechanism might only be appropriate if the target object is capable of using other components of your deferral mechanism at run time. Можно проверить характеристики системы типа объекта, возвращаемого как TargetObject , и убедиться, что объект поддерживает ваш метод отсрочки.You could check the type system characteristics of the object returned as TargetObject and make sure that object supports your deferral technique. Если это так, расширение разметки возвращает значение, а если нет, расширение разметки создает исключение, которое будет выбрано как внутреннее исключение средством записи объектов XAML.If so, your markup extension returns a value, and if not, your markup extension throws an exception that will be picked up as an inner exception by a XAML object writer. Аналогичный сценарий позволяет гарантировать, что конкретное свойство поддерживает возможность, путем проверки системных характеристик типа TargetProperty .A similar scenario is assuring that a particular property supports a capability, by checking type system characteristics of the TargetProperty.

Хотя имя API IProvideValueTarget может указывать на связь с MarkupExtension.ProvideValue , информация, сообщаемая, IProvideValueTarget может также быть полезной для TypeConverter или ValueSerializer .Although the API name IProvideValueTarget might imply an association with MarkupExtension.ProvideValue, the information reported by IProvideValueTarget can also be useful to a TypeConverter or ValueSerializer. Или, как TypeConverter ValueSerializer правило, имеют больше контекста, чем расширение разметки, так как они относятся к определенному целевому типу или целевому свойству, и, таким образом, ситуация обычно предсказуема в системе типов.A TypeConverter or ValueSerializer typically have more context than a markup extension because they are dedicated to a particular target type or target property, and thus the situational validity is usually predictable in the type system. Однако существуют и другие сценарии.However, other scenarios exist. Ниже приведен список сценариев, которые могут быть реализованы преобразователем типов или расширением разметки.The following is a list of some scenarios that might be implemented by either a type converter or a markup extension:

  • Возвращает значение TargetObject , чтобы считывать значения экземпляров других свойств этого объекта.Get TargetObject to read instance values of other properties on that object. Обратите внимание, что обработка здесь может быть достаточно надежной для ненужных значений, так как порядок обработки элементов XAML в целевом объекте может быть недетерминированным.Note that your handling here might need to be robust for unset values, because the processing order of XAML members on the target object can be nondeterministic.

  • Получите TargetObject доступ на чтение метаданных уровня типа или, чтобы убедиться, что необходимые интерфейсы реализуются типом.Get TargetObject to read type-level metadata, or to verify that required interfaces are implemented by the type.

  • Получить TargetProperty для чтения метаданных свойств.Get TargetProperty to read property metadata.

Одним из сценариев является использование IProvideValueTarget сведений для ограничения того, какие объекты или свойства разрешено устанавливать расширением разметки.One scenario is to use IProvideValueTarget information to limit which objects or properties are permitted to be set by your markup extension.

Прежде чем пытаться использовать службу, убедитесь, что сама служба не null возвращена соответствующим параметром поставщика службы, который используется для контекста.Before attempting to use the service, make sure that the service itself is not null when returned by the relevant service provider parameter you are using for context.

Важно!

При использовании службы особенно важно не изменять объект, на который ссылается TargetObject свойство, или другие объекты, на которые ссылается этот объект.When using the service, it is particularly important not to modify the object referenced by the TargetObject property, or other objects referenced by that object. В частности, в WPF эти изменения могут привести к непредвиденным изменениям, которые сделают систему свойств WPF недействительной.For WPF specifically, these changes could cause unexpected changes that would invalidate the WPF property system.

Примечание

Не используйте тип TargetProperty для определения точного типа, возвращаемого расширением разметки или преобразователем типов.Do not use the type of TargetProperty to determine which precise type a markup extension or type converter should return. Это не рекомендуется.That is not a best practice. Тип возвращаемого значения должен соответствовать атрибутам ( MarkupExtensionReturnTypeAttribute для расширений разметки) или шаблонам (имя класса преобразователя типов).Your return type should be consistent with attributing (MarkupExtensionReturnTypeAttribute for markup extensions) or patterns (class name of the type converter).

В предыдущих версиях платформа .NET Framework этот интерфейс существовал в сборке, относящейся к WPF, WindowsBase.In previous versions of the .NET Framework, this interface existed in the WPF-specific assembly WindowsBase. В платформа .NET Framework 4 IProvideValueTarget находится в сборке System. XAML.In .NET Framework 4, IProvideValueTarget is in the System.Xaml assembly. Для получения дополнительной информации см. Types Migrated from WPF to System.Xaml.For more information, see Types Migrated from WPF to System.Xaml.

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

Эта служба поддерживает функции платформы, такие как привязка к свойству зависимостей.This service supports framework features such as binding on a dependency property.

В WPF служба, представленная, IProvideValueTarget может возвращать объекты и свойства в ситуациях, когда значение, возвращаемое из расширения разметки или преобразователя типов, зависит от контекста.In WPF, the service represented by IProvideValueTarget can return objects and properties for situations where the value to return from a markup extension or type converter depends on context.

IProvideValueTarget используется в значительной степени во внутренней реализации BindingBase , класс, реализующий механизм привязки для свойств зависимостей в WPF.IProvideValueTarget is leveraged heavily in the internal implementation of BindingBase, the class that implements the binding mechanism for dependency properties in WPF.

Внутренний поставщик услуг по умолчанию для WPF реализует IProvideValueTarget Использование пользовательского расширения разметки или преобразователя типов.A default internal service provider for WPF implements IProvideValueTarget for usage by a custom markup extension or type converter. Объект и свойство, сообщаемое, IProvideValueTarget можно задать только внутренней службой WPF.The object and property reported by IProvideValueTarget can only be set by the internal WPF service. Выход за рамки этого определения того, как IProvideValueTarget работает, потребует определения собственного поставщика услуг для расширения разметки и использования преобразователей типов, реализующего по крайней мере IProvideValueTarget IXamlTypeResolver службы и, и это расширенный сценарий, не описанный здесь.Going beyond this definition of how IProvideValueTarget operates would require defining your own service provider for markup extension and type converter usages that implements at the very least the IProvideValueTarget and IXamlTypeResolver services, and that is an advanced scenario that is not described here.

Значение NULL для TargetProperty или не TargetObject обязательно означает, что расширение разметки или преобразователь типов не может действовать, хотя это зависит от реализации.A null value for TargetProperty or TargetObject does not necessarily mean that a markup extension or type converter cannot act, although that depends on your implementation. Пример случая, когда значения из IProvideValueTarget имеют значение null, даже если служба доступна, — если расширение разметки вложено в другое расширение разметки, например Binding .An example case where the values from IProvideValueTarget are null even if the service is available is if your markup extension is nested within another markup extension, such as a Binding. Реализация, основанная на, IProvideValueTarget должна всегда проверять наличие значений NULL, если только для создания определенного исключения, если это предполагаемый проект.An implementation that relies on IProvideValueTarget should always check for null values if only for the purpose of throwing a specific exception, if that is your intended design.

Свойства

TargetObject

Получает сообщаемый целевой объект.Gets the target object being reported.

TargetProperty

Получает идентификатор сообщаемого целевого свойства.Gets an identifier for the target property being reported.

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

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