IProvideValueTarget Interfejs

Definicja

Reprezentuje usługę, która zgłasza relacje z obiektem z właściwościami dla oceny rozszerzenia znaczników.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

Uwagi

IProvideValueTarget Reprezentuje usługę, która raportuje informacje dotyczące struktury właściwości obiektu otaczającej, w której jest wywoływany konwerter wartości.IProvideValueTarget represents a service that reports information regarding the object-property structure surrounding where a value converter is invoked.

Konwertery typów i rozszerzenia znaczników mogą wykonywać zapytania IProvideValueTarget jako usługa w kontekście usługi dostarczanym przez moduł zapisujący obiektów XAML, gdy moduł zapisujący obiektów XAML wywoła zachowanie konwersji wartości.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. Aby uzyskać więcej informacji, zobacz Typy konwerterów i rozszerzenia znaczników dla XAML i kontekstów usługi dostępne dla konwerterów typów i rozszerzeń znaczników.For more information, see Type Converters and Markup Extensions for XAML and Service Contexts Available to Type Converters and Markup Extensions.

W odniesieniu do rozszerzeń znaczników, gdzie IProvideValueTarget jest to przydatne, można określić prawidłowość użycia sytuacji w rozszerzeniu znacznika.For markup extensions specifically, a scenario where IProvideValueTarget is useful is to determine the validity of your markup extension's situational usage. Na przykład rozszerzenie znacznika może zaimplementować mechanizm odroczenia wartości, ale użycie tego mechanizmu może być odpowiednie tylko wtedy, gdy obiekt docelowy jest w stanie używać innych składników mechanizmu odroczenia w czasie wykonywania.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. Można sprawdzić charakterystykę systemu typu obiektu zwróconego jako TargetObject i upewnić się, że obiekt obsługuje metodę odroczenia.You could check the type system characteristics of the object returned as TargetObject and make sure that object supports your deferral technique. Jeśli tak, rozszerzenie znaczników zwraca wartość, a jeśli nie, rozszerzenie znaczników zgłasza wyjątek, który zostanie pobrany jako wyjątek wewnętrzny przez moduł zapisujący obiektów 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. Podobny scenariusz polega na tym, że dana właściwość obsługuje funkcję, sprawdzając charakterystykę systemu typu TargetProperty .A similar scenario is assuring that a particular property supports a capability, by checking type system characteristics of the TargetProperty.

Chociaż nazwa interfejsu API IProvideValueTarget może oznaczać skojarzenie z MarkupExtension.ProvideValue , informacje raportowane przez program IProvideValueTarget mogą również być przydatne dla TypeConverter lub 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. TypeConverterLub ValueSerializer zwykle ma więcej kontekstu niż rozszerzenie znaczników, ponieważ są one przeznaczone dla określonego typu docelowego lub właściwości docelowej, w związku z czym okres ważności jest zwykle przewidywalny w systemie typów.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. Istnieją jednak inne scenariusze.However, other scenarios exist. Poniżej znajduje się lista niektórych scenariuszy, które mogą być implementowane przez konwerter typów lub rozszerzenie znaczników:The following is a list of some scenarios that might be implemented by either a type converter or a markup extension:

  • Pobierz TargetObject wartości wystąpienia innych właściwości tego obiektu.Get TargetObject to read instance values of other properties on that object. Należy zauważyć, że obsługa w tym miejscu może być niezawodna w przypadku niezbyt nieużywanych wartości, ponieważ kolejność przetwarzania elementów członkowskich XAML w obiekcie docelowym może być niejednoznaczna.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.

  • Pobierz TargetObject metadane na poziomie typu lub, aby sprawdzić, czy wymagane interfejsy są implementowane przez typ.Get TargetObject to read type-level metadata, or to verify that required interfaces are implemented by the type.

  • Pobierz TargetProperty metadane właściwości.Get TargetProperty to read property metadata.

Jednym z scenariuszy jest użycie IProvideValueTarget informacji w celu ograniczenia, które obiekty lub właściwości mogą być ustawiane przez rozszerzenie znacznika.One scenario is to use IProvideValueTarget information to limit which objects or properties are permitted to be set by your markup extension.

Przed podjęciem próby skorzystania z usługi upewnij się, że sama usługa nie jest null zwracana przez odpowiedni parametr dostawcy usług, który jest używany w kontekście.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.

Ważne

W przypadku korzystania z usługi szczególnie ważne jest, aby nie modyfikować obiektu, do którego odwołuje się TargetObject Właściwość, lub innych obiektów, do których odwołuje się ten obiekt.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. W przypadku platformy WPF w systemie te zmiany mogą spowodować nieoczekiwane zmiany, które spowodują unieważnienie systemu właściwości WPF.For WPF specifically, these changes could cause unexpected changes that would invalidate the WPF property system.

Uwaga

Nie należy używać typu TargetProperty do określenia dokładnego typu, który ma być zwracany przez rozszerzenie znacznika lub konwerter typu.Do not use the type of TargetProperty to determine which precise type a markup extension or type converter should return. To nie jest najlepszym rozwiązaniem.That is not a best practice. Zwracany typ powinien być zgodny z przyznanymi ( MarkupExtensionReturnTypeAttribute dla rozszerzeń znaczników) lub wzorcami (nazwa klasy konwertera typów).Your return type should be consistent with attributing (MarkupExtensionReturnTypeAttribute for markup extensions) or patterns (class name of the type converter).

W poprzednich wersjach .NET Framework ten interfejs istniał w 'Windowsbase zestaw specyficzny dla platformy WPF.In previous versions of the .NET Framework, this interface existed in the WPF-specific assembly WindowsBase. W .NET Framework 4 IProvideValueTarget znajduje się w zestawie System. XAML.In .NET Framework 4, IProvideValueTarget is in the System.Xaml assembly. Aby uzyskać więcej informacji, zobacz typy migrowane z WPF do System. XAML.For more information, see Types Migrated from WPF to System.Xaml.

Uwagi dotyczące użycia WPFWPF Usage Notes

Ta usługa obsługuje funkcje platformy, takie jak Powiązywanie dla właściwości zależności.This service supports framework features such as binding on a dependency property.

W programie WPF usługa reprezentowana przez IProvideValueTarget może zwracać obiekty i właściwości w sytuacjach, gdy wartość zwracana z rozszerzenia znacznika lub konwertera typów zależy od kontekstu.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 jest wielokrotnie wykorzystywana w wewnętrznej implementacji BindingBase klasy, która implementuje mechanizm powiązania dla właściwości zależności w WPF.IProvideValueTarget is leveraged heavily in the internal implementation of BindingBase, the class that implements the binding mechanism for dependency properties in WPF.

Domyślny wewnętrzny dostawca usług dla platformy WPF implementuje IProvideValueTarget użycie przez niestandardowe rozszerzenie znaczników lub konwerter typów.A default internal service provider for WPF implements IProvideValueTarget for usage by a custom markup extension or type converter. Obiekt i Właściwość raportowane przez IProvideValueTarget mogą być ustawiane przez wewnętrzną usługę WPF.The object and property reported by IProvideValueTarget can only be set by the internal WPF service. Przekroczenie tej definicji sposobu IProvideValueTarget działania wymaga zdefiniowania własnego dostawcy usług dla rozszerzeń znaczników i użycia konwertera typów, które implementują co najmniej te IProvideValueTarget usługi i IXamlTypeResolver który jest zaawansowanym scenariuszem, który nie został opisany w tym miejscu.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.

Wartość null dla TargetProperty lub nie TargetObject musi oznaczać, że rozszerzenie znacznika lub konwerter typów nie mogą działać, chociaż zależy od implementacji.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. Przykładem sytuacji, gdy wartości z IProvideValueTarget są równe null, nawet jeśli usługa jest dostępna, jeśli rozszerzenie znaczników jest zagnieżdżone w innym rozszerzeniu znacznika, takim jak 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. Implementacja, która opiera się na, IProvideValueTarget powinna zawsze sprawdzać wartości null, jeśli tylko w celu zgłaszania określonego wyjątku, jeśli jest to zamierzony projekt.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.

Właściwości

TargetObject

Pobiera raportowany obiekt docelowy.Gets the target object being reported.

TargetProperty

Pobiera identyfikator raportowanej właściwości docelowej.Gets an identifier for the target property being reported.

Dotyczy

Zobacz też