Xamarin.Forms Záložní vazby

Download Sample Stažení 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. 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ů.

Stránka MonkeyDetail znázorňuje nastavení FallbackValue vlastnosti:

<Label Text="{Binding Population, FallbackValue='Population size unknown'}"
       ... />   

Vazba na této Label sadě definuje FallbackValue hodnotu, 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. Všimněte si, že zde FallbackValue je hodnota vlastnosti oddělena znaky jednoduchých uvozovek (apostrof).

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.

Tady je spuštěný program:

FallbackValue Binding

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 na stránce MonkeyDetail se 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.

Stránka Monkeys znázorňuje nastavení TargetNullValue vlastnosti:

<ListView ItemsSource="{Binding Monkeys}"
          ...>
    <ListView.ItemTemplate>
        <DataTemplate>
            <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 ImageLabel a definují TargetNullValue hodnoty, 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. Všimněte si, že hodnoty TargetNullValue vlastností jsou oddělené znaky jednoduchých uvozovek (apostrof).

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.

Tady je spuštěný program:

TargetNullValue Binding

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 na cíl.

Důležité

Formátování řetězců není použito ve výrazu vazby při TargetNullValue nastavení vlastnosti.