Udostępnij za pośrednictwem


IProvideValueTarget Interfejs

Definicja

Reprezentuje usługę, która zgłasza relacje właściwości obiektu sytuacyjnego na potrzeby oceny rozszerzenia znaczników.

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

Uwagi

IProvideValueTarget reprezentuje usługę, która zgłasza informacje dotyczące struktury właściwości obiektu wokół miejsca wywoływanego konwertera wartości.

Konwertery typów i rozszerzenia znaczników mogą wysyłać zapytania o IProvideValueTarget usługę jako usługę w kontekście usługi, który jest dostarczany przez składnik zapisywania obiektów XAML, gdy składnik zapisywania obiektów XAML wywołuje zachowanie konwersji wartości. Aby uzyskać więcej informacji, zobacz Konwertery typów i rozszerzenia znaczników dla XAML i kontekstów usługi dostępne dla konwerterów typów i rozszerzeń znaczników.

W szczególności w przypadku rozszerzeń znaczników scenariusz, w którym IProvideValueTarget przydaje się określenie ważności użycia sytuacyjnego rozszerzenia znaczników. Na przykład rozszerzenie znaczników może zaimplementować mechanizm odroczenia wartości, ale użycie tego mechanizmu może być odpowiednie tylko wtedy, gdy obiekt docelowy może używać innych składników mechanizmu odroczenia w czasie wykonywania. Można sprawdzić charakterystykę systemu typów obiektu zwróconego jako TargetObject i upewnić się, że obiekt obsługuje technikę odroczenia. Jeśli tak, rozszerzenie znaczników zwraca wartość, a jeśli nie, rozszerzenie znaczników zgłasza wyjątek, który zostanie odebrany jako wyjątek wewnętrzny przez moduł zapisywania obiektów XAML. Podobny scenariusz zapewnia, że określona właściwość obsługuje możliwość, sprawdzając charakterystykę systemu typów obiektu TargetProperty.

Chociaż nazwa IProvideValueTarget interfejsu API może oznaczać skojarzenie z elementem MarkupExtension.ProvideValue, informacje zgłaszane przez IProvideValueTarget usługę mogą być również przydatne dla elementu TypeConverter lub ValueSerializer. Typ TypeConverter lub ValueSerializer zwykle mają więcej kontekstu niż rozszerzenie znaczników, ponieważ są one przeznaczone dla określonego typu docelowego lub właściwości docelowej, a zatem ważność sytuacyjna jest zwykle przewidywalna w systemie typów. Istnieją jednak inne scenariusze. Poniżej znajduje się lista niektórych scenariuszy, które mogą być implementowane przez konwerter typów lub rozszerzenie znaczników:

  • Pobierz TargetObject do odczytu wartości wystąpień innych właściwości tego obiektu. Należy pamiętać, że obsługa w tym miejscu może być niezawodna w przypadku niezbiornych wartości, ponieważ kolejność przetwarzania elementów członkowskich XAML w obiekcie docelowym może być niedeterministyczna.

  • Uzyskaj dostęp TargetObject do odczytu metadanych na poziomie typu lub sprawdź, czy wymagane interfejsy są implementowane przez typ.

  • Pobierz TargetProperty do odczytu metadanych właściwości.

Jednym ze scenariuszy jest użycie IProvideValueTarget informacji w celu ograniczenia, które obiekty lub właściwości mogą być ustawiane przez rozszerzenie znaczników.

Przed podjęciem próby użycia usługi upewnij się, że sama usługa nie null jest zwracana przez odpowiedni parametr dostawcy usług używany na potrzeby kontekstu.

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ść, ani innych obiektów, do których odwołuje się ten obiekt. W szczególności w przypadku WPF te zmiany mogą spowodować nieoczekiwane zmiany, które unieważniłyby system właściwości WPF.

Uwaga

Nie należy używać typu TargetProperty , aby określić, który dokładny typ ma zwracać rozszerzenie znaczników lub konwerter typów. To nie jest najlepsze rozwiązanie. Zwracany typ powinien być zgodny z przypisywaniem (MarkupExtensionReturnTypeAttribute w przypadku rozszerzeń znaczników) lub wzorcami (nazwa klasy konwertera typów).

W poprzednich wersjach .NET Framework ten interfejs istniał w bazie danych WindowsBase zestawu specyficznego dla platformy WPF. W .NET Framework 4 IProvideValueTarget znajduje się w zestawie System.Xaml. Aby uzyskać więcej informacji, zobacz Typy migrowane z WPF do System.Xaml.

Uwagi dotyczące użycia platformy WPF

Ta usługa obsługuje funkcje struktury, takie jak powiązanie z właściwością zależności.

W WPF usługa reprezentowana przez IProvideValueTarget program może zwracać obiekty i właściwości w sytuacjach, w których wartość do zwrócenia z rozszerzenia znaczników lub konwerter typów zależy od kontekstu.

IProvideValueTarget jest intensywnie wykorzystuje w wewnętrznej implementacji BindingBaseklasy , która implementuje mechanizm powiązania dla właściwości zależności w WPF.

Domyślny wewnętrzny dostawca usług dla WPF implementuje IProvideValueTarget do użycia przez niestandardowe rozszerzenie znaczników lub konwerter typów. Obiekt i właściwość zgłoszona przez IProvideValueTarget usługę można ustawić tylko przez wewnętrzną usługę WPF. Wykraczanie poza tę definicję sposobu IProvideValueTarget działania wymagałoby zdefiniowania własnego dostawcy usług dla rozszerzeń znaczników i użycia konwertera typów, które implementują co najmniej IProvideValueTarget usługi i IXamlTypeResolver i jest to zaawansowany scenariusz, który nie został opisany w tym miejscu.

Wartość null dla TargetProperty lub TargetObject nie musi oznaczać, że rozszerzenie znaczników lub konwerter typów nie może działać, chociaż zależy to od implementacji. Przykładowy przypadek, w którym wartości z IProvideValueTarget elementu mają wartość null, nawet jeśli usługa jest dostępna, to jeśli rozszerzenie znaczników jest zagnieżdżone w innym rozszerzeniu znaczników, takim jak Binding. Implementacja, która opiera się na IProvideValueTarget , powinna zawsze sprawdzać wartości null tylko w celu zgłoszenia określonego wyjątku, jeśli jest to zamierzony projekt.

Właściwości

TargetObject

Pobiera zgłaszany obiekt docelowy.

TargetProperty

Pobiera identyfikator zgłaszanej właściwości docelowej.

Dotyczy

Zobacz też