Sdílet prostřednictvím


IProvideValueTarget Rozhraní

Definice

Představuje službu, která hlásí relace objektu a vlastnosti pro vyhodnocení rozšíření značek.

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

Poznámky

IProvideValueTarget představuje službu, která hlásí informace týkající se struktury objektu a vlastnosti v okolí, kde je vyvolán převaděč hodnot.

Převaděče typů a rozšíření značek se můžou dotazovat IProvideValueTarget na jako službu na kontext služby, který poskytuje zapisovač objektů XAML, když zapisovač objektů XAML vyvolá chování převodu hodnoty. Další informace najdete v tématu Převaděče typů a rozšíření značek pro kontexty XAML a služby dostupné pro převaděče typů a rozšíření značek.

Konkrétně pro rozšíření značek je scénářem, ve kterém IProvideValueTarget je užitečné určit platnost situačního využití rozšíření značek. Například rozšíření značek může implementovat mechanismus odložení hodnoty, ale použití tohoto mechanismu může být vhodné pouze v případě, že cílový objekt je schopen používat jiné komponenty mechanismu odložení za běhu. Můžete zkontrolovat systémové charakteristiky typu vráceného objektu a TargetObject ujistit se, že objekt podporuje vaši techniku odložení. Pokud ano, vrátí rozšíření značek hodnotu, a pokud ne, vyvolá vaše rozšíření značek výjimku, kterou zapisovač objektů XAML vyzvedne jako vnitřní výjimku. Podobným scénářem je zajištění, že konkrétní vlastnost podporuje schopnost, a to kontrolou vlastností TargetPropertytypu systému .

I když název IProvideValueTarget rozhraní API může naznačovat přidružení k MarkupExtension.ProvideValue, můžou být informace hlášené nástrojem IProvideValueTarget užitečné také pro TypeConverter objekt nebo ValueSerializer. A TypeConverter nebo ValueSerializer mají obvykle více kontextu než rozšíření značek, protože jsou vyhrazené pro konkrétní cílový typ nebo cílovou vlastnost, a proto je situační platnost obvykle předvídatelná v systému typů. Existují ale i jiné scénáře. Následuje seznam některých scénářů, které můžou být implementovány převaděčem typů nebo rozšířením značek:

  • Získejte TargetObject čtení hodnot instancí jiných vlastností tohoto objektu. Všimněte si, že zpracování zde může být pro nenasazené hodnoty robustní, protože pořadí zpracování členů XAML v cílovém objektu může být nedeterministické.

  • Přečtěte si TargetObject metadata na úrovni typu nebo ověřte, že typ implementuje požadovaná rozhraní.

  • Získejte TargetProperty přístup ke čtení metadat vlastností.

Jedním ze scénářů je použití IProvideValueTarget informací k omezení toho, které objekty nebo vlastnosti smí vaše rozšíření značek nastavit.

Před pokusem o použití služby se ujistěte, že samotná služba není null vrácena příslušným parametrem poskytovatele služeb, který používáte pro kontext.

Důležité

Při používání služby je obzvláště důležité neupravovat objekt odkazovaný TargetObject vlastností nebo jiné objekty odkazované tímto objektem. Konkrétně pro WPF by tyto změny mohly způsobit neočekávané změny, které by zneplatnit systém vlastností WPF.

Poznámka

Nepoužívejte typ k určení přesného TargetProperty typu, který má rozšíření značek nebo převaděč typů vrátit. To není osvědčený postup. Návratový typ by měl být konzistentní s přiřazením (MarkupExtensionReturnTypeAttribute pro rozšíření značek) nebo vzory (název třídy převaděče typů).

V předchozích verzích rozhraní .NET Framework existovalo toto rozhraní v sestavení WPF WindowsBase. V rozhraní .NET Framework 4 IProvideValueTarget je v sestavení System.Xaml. Další informace najdete v tématu Typy migrované z WPF do System.Xaml.

Poznámky k využití WPF

Tato služba podporuje funkce architektury, jako je například vazba na vlastnost závislostí.

Ve WPF může služba reprezentovaná IProvideValueTarget vracet objekty a vlastnosti v situacích, kdy hodnota, která se má vrátit z rozšíření značek nebo převaděče typů, závisí na kontextu.

IProvideValueTarget se výrazně využívá v interní implementaci BindingBasetřídy , která implementuje mechanismus vazby pro vlastnosti závislostí ve WPF.

Výchozí interní poskytovatel služeb pro WPF implementuje IProvideValueTarget použití vlastním rozšířením značek nebo převaděčem typů. Objekt a vlastnost hlášený uživatelem IProvideValueTarget lze nastavit pouze interní službou WPF. Přechod nad rámec této definice toho, jak IProvideValueTarget funguje, by vyžadovalo definování vlastního poskytovatele služeb pro použití rozšíření značek a převaděče typů, které implementují přinejmenším IProvideValueTarget služby a IXamlTypeResolver a to je pokročilý scénář, který zde není popsaný.

Hodnota null pro TargetProperty nebo TargetObject nemusí nutně znamenat, že rozšíření značek nebo převaděč typů nemůže jednat, i když to závisí na vaší implementaci. Příkladem případu, kdy jsou hodnoty z IProvideValueTarget hodnoty null, i když je služba k dispozici, je v případě, že je vaše rozšíření značek vnořené do jiného rozšíření značek, jako Bindingje například . Implementace, která se spoléhá na IProvideValueTarget , by měla vždy kontrolovat hodnoty null, pokud pouze za účelem vyvolání konkrétní výjimky, pokud je to váš zamýšlený návrh.

Vlastnosti

TargetObject

Získá cílový objekt, který je hlášen.

TargetProperty

Získá identifikátor cílové vlastnosti, která je hlášena.

Platí pro

Viz také