Sdílet prostřednictvím


Náhradní vazby

Projděte si ukázku. Procházení ukázky

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:

Záložní vazbaValue

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:

TargetNullValue Binding.

Proto v tomto příkladu Image a Label objekty zobrazí jejich TargetNullValue , když jsou nulljejich 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'}" />