Náhradní vazby
Někdy datové vazby selžou, protože zdroj vazby se nedá přeložit nebo protože vazba bude úspěšná, ale vrátí null
hodnotu. I když se tyto scénáře dají zpracovat pomocí převaděčů hodnot nebo jiného dalšího kódu, datové vazby mohou být robustnější definováním záložních hodnot, které se mají použít v případě selhání procesu vazby. V aplikaci .NET Multi-Platform App UI (.NET MAUI) toho lze dosáhnout definováním FallbackValue a TargetNullValue vlastnostmi ve výrazu vazby. Vzhledem k tomu, že tyto vlastnosti jsou umístěny ve BindingBase třídě, lze je použít s vazbami, více vazbami, kompilovanými vazbami a s rozšířením Binding
značek.
Poznámka:
FallbackValue Použití vlastností ve TargetNullValue výrazu vazby je volitelné.
Definování záložní hodnoty
Tato FallbackValue vlastnost umožňuje definovat záložní hodnotu, která se použije, když zdroj vazby nelze přeložit. Běžným scénářem nastavení této vlastnosti je vazba na zdrojové vlastnosti, které nemusí existovat u všech objektů v vázané kolekci heterogenních typů.
Následující příklad ukazuje nastavení FallbackValue vlastnosti:
<Label Text="{Binding Population, FallbackValue='Population size unknown'}"
... />
Vazba na objektu Label definuje FallbackValue hodnotu (oddělenou znaky jednoduchých uvozovek), která bude nastavena v cíli, pokud zdroj vazby nelze přeložit. Proto se hodnota definovaná FallbackValue vlastností zobrazí, pokud Population
vlastnost v vázaném objektu neexistuje.
Místo definování FallbackValue hodnot vlastností se doporučuje definovat je jako prostředky v objektu ResourceDictionary. Výhodou tohoto přístupu je, že tyto hodnoty jsou definovány jednou v jednom umístění a jsou snadněji lokalizovatelné. Prostředky je pak možné načíst pomocí StaticResource
rozšíření značek:
<Label Text="{Binding Population, FallbackValue={StaticResource populationUnknown}}"
... />
Poznámka:
Vlastnost není možné nastavit FallbackValue pomocí vazbového výrazu.
FallbackValue Pokud vlastnost není nastavena ve výrazu vazby a cesta vazby nebo část cesty není vyřešena, BindableProperty.DefaultValue
je nastavena na cíl. Pokud je však FallbackValue vlastnost nastavena a cesta vazby nebo část cesty není vyřešena, hodnota vlastnosti FallbackValue hodnoty je nastavena v cíli:
Proto v tomto příkladu Label zobrazí "Velikost populace neznámá", protože vázaný objekt nemá Population
vlastnost.
Důležité
Definovaný převaděč hodnot se nespustí ve výrazu vazby při FallbackValue nastavení vlastnosti.
Definování hodnoty nahrazení null
Vlastnost TargetNullValue umožňuje definovat náhradní hodnotu, která se použije při překladu zdroje vazby, ale hodnota je null
. Běžným scénářem nastavení této vlastnosti je vazba na zdrojové vlastnosti, které mohou být null
v vázané kolekci.
Následující příklad ukazuje nastavení TargetNullValue vlastnosti:
<ListView ItemsSource="{Binding Monkeys}"
...>
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Monkey">
<ViewCell>
<Grid>
...
<Image Source="{Binding ImageUrl, TargetNullValue='https://upload.wikimedia.org/wikipedia/commons/2/20/Point_d_interrogation.jpg'}"
... />
...
<Label Text="{Binding Location, TargetNullValue='Location unknown'}"
... />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Vazby na obou Image Label a definují TargetNullValue hodnoty (oddělené znaky jednoduchých uvozovek), které budou použity, pokud cesta vazby vrátí null
. Proto se hodnoty definované vlastnostmi TargetNullValue zobrazí pro všechny objekty v kolekci, kde ImageUrl
nejsou definovány vlastnosti a Location
vlastnosti.
Místo definování TargetNullValue hodnot vlastností se doporučuje definovat je jako prostředky v objektu ResourceDictionary. Výhodou tohoto přístupu je, že tyto hodnoty jsou definovány jednou v jednom umístění a jsou snadněji lokalizovatelné. Prostředky je pak možné načíst pomocí StaticResource
rozšíření značek:
<Image Source="{Binding ImageUrl, TargetNullValue={StaticResource fallbackImageUrl}}"
... />
<Label Text="{Binding Location, TargetNullValue={StaticResource locationUnknown}}"
... />
Poznámka:
Vlastnost není možné nastavit TargetNullValue pomocí vazbového výrazu.
TargetNullValue Pokud vlastnost není nastavena ve výrazu vazby, zdrojová hodnota null
bude převedena, pokud je definován převaděč hodnot, naformátován, pokud StringFormat
je definován a výsledek je nastaven na cíl. Pokud je však TargetNullValue vlastnost nastavena, zdrojová hodnota null
bude převedena, pokud je definován převaděč hodnot, a pokud je stále null
po převodu, hodnota TargetNullValue vlastnosti je nastavena v cíli:
Proto v tomto příkladu Image a Label objekty zobrazí jejich TargetNullValue , když jsou null
jejich zdrojové objekty .
Důležité
Formátování řetězců není použito ve výrazu vazby při TargetNullValue nastavení vlastnosti.
Porovnání TargetNullValue a FallbackValue
Obě TargetNullValue a FallbackValue používají se v datových vazbách ke zpracování scénářů, kdy je null
vázaná hodnota nebo když se vazba nezdaří. Znalost toho, kdy je vhodné je používat, pomáhá zajistit bezproblémové uživatelské prostředí.
TargetNullValue
TargetNullValue Pomocí vlastnosti zadejte hodnotu, která se má zobrazit, když vazba bude úspěšná, ale vázaná vlastnost jenull
:
<Label Text="{Binding FirstName, TargetNullValue='No name available'}" />
Pokud je null
v tomto příkladu FirstName
Label zobrazená možnost Není k dispozici žádný název.
Náhradní hodnota
FallbackValue Vlastnost použijte k zadání hodnoty v případě, že proces vazby selže zcela, například nesprávná cesta nebo chybějící kontext vazby:
<Label Text="{Binding FirstName, FallbackValue='Binding failed'}" />
Pokud v tomto příkladu vazba selže Label , zobrazí se "Vazba selhala".
Kombinované použití
Vlastnosti TargetNullValue a FallbackValue vlastnosti lze kombinovat v jednom vazbovém výrazu:
<Label Text="{Binding FirstName, TargetNullValue='No name available', FallbackValue='Binding failed'}" />