Sdílet prostřednictvím


Shrnutí kapitoly 16. Datová vazba

Poznámka:

Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.

Programátoři často zapisují obslužné rutiny událostí, které detekují, kdy se změnila vlastnost jednoho objektu, a používají ji ke změně hodnoty vlastnosti v jiném objektu. Tento proces lze automatizovat pomocí techniky datové vazby. Datové vazby jsou obvykle definovány v JAZYCE XAML a stávají se součástí definice uživatelského rozhraní.

Tyto datové vazby velmi často připojují objekty uživatelského rozhraní k podkladovým datům. Toto je technika, která se zkoumá více v kapitole 18. MVVM. Datové vazby ale můžou také propojit dva nebo více prvků uživatelského rozhraní. Většina prvních příkladů datové vazby v této kapitole ukazuje tuto techniku.

Základy vazeb

Do datové vazby se podílí několik vlastností, metod a tříd:

Následující dvě třídy podporují rozšíření značek XAML pro vazby:

Do datové vazby se zapojují dvě rozhraní:

  • INotifyPropertyChanged in the System.ComponentModel namespace is for implement notification when a property changes
  • IValueConverter slouží k definování malých tříd, které v datových vazbách převádějí hodnoty z jednoho typu na jiný.

Datová vazba spojuje dvě vlastnosti stejného objektu nebo (častěji) dva různé objekty. Tyto dvě vlastnosti se označují jako zdroj a cíl. Obecně platí, že změna ve zdrojové vlastnosti způsobí, že v cílové vlastnosti dojde ke změně, ale někdy je směr obrácený. Nedbající:

Třída, která implementuje INotifyPropertyChanged vyvolá PropertyChanged událost, když vlastnost změní hodnotu. BindableObject implementuje INotifyPropertyChanged a automaticky aktivuje PropertyChanged událost, když vlastnost zálohovaná BindableProperty hodnotami změn, ale můžete napsat vlastní třídy, které implementují INotifyPropertyChanged bez odvození z BindableObject.

Kód a XAML

Ukázka OpacityBindingCode ukazuje, jak nastavit datovou vazbu v kódu:

  • Zdroj je Value vlastnost a Slider
  • Cílem je Opacity vlastnost Label

Dva objekty jsou spojeny nastavením BindingContext Label objektu na Slider objekt. Dvě vlastnosti jsou spojeny voláním SetBinding rozšiřující metody odkazující OpacityProperty na Label bindable vlastnost a Value vlastnost Slider vyjádřené jako řetězec.

Slider Manipulace s poté způsobíLabel, že se zeslabí a zmizí ze zobrazení.

OpacityBindingXaml je stejný program se sadou datových vazeb v XAML. Label Vlastnost BindingContext je nastavena na x:Reference rozšíření značky odkazující Sliderna , a Opacity vlastnost Label je nastavena na Binding rozšíření značky s jeho Path vlastností odkazující na Value vlastnost Slider.

Zdroj a BindingContext

Ukázka BindingSourceCode ukazuje alternativní přístup v kódu. Objekt Binding je vytvořen nastavením Source vlastnosti na Slider objekt a Path vlastnost na Hodnotu. Metoda SetBinding BindableObject je pak volána na objektu Label .

Konstruktor Binding byl také použit k definování objektu.Binding

Ukázka BindingSourceXaml ukazuje srovnatelnou techniku v jazyce XAML. Vlastnost Opacity objektu Label je nastavena na Binding rozšíření značek s Path nastavenou na Value vlastnost a Source nastavena na vložené x:Reference rozšíření značek.

V souhrnu existují dva způsoby, jak odkazovat na zdrojový objekt vazby:

  • BindingContext Prostřednictvím vlastnosti cíle
  • Source Prostřednictvím vlastnosti samotného objektu Binding

Pokud jsou zadány oba, druhá má přednost. Výhodou BindingContext je, že se šíří prostřednictvím vizuálního stromu. To je velmi užitečné, pokud je více cílových vlastností svázané se stejným zdrojovým objektem.

Program WebViewDemo demonstruje tuto techniku s elementem WebView . Dva Button prvky pro navigaci dozadu a vpřed dědí BindingContext z nadřazeného objektu, který odkazuje na WebView. Vlastnosti IsEnabled těchto dvou tlačítek pak mají jednoduchá Binding rozšíření značek, která cílí na vlastnosti tlačítka IsEnabled na základě nastavení CanGoBack a CanGoForward vlastností jen pro WebViewčtení .

Režim vazby

Mode Nastavte vlastnost Binding na člen výčtuBindingMode:

  • OneWay aby změny ve zdrojové vlastnosti ovlivnily cíl.
  • OneWayToSource aby změny v cílové vlastnosti ovlivnily zdroj
  • TwoWay aby změny ve zdroji a cíli vzájemně ovlivnily
  • Default k použití zadaného DefaultBindingMode při vytvoření cíle BindableProperty . Pokud nebyla zadána žádná, výchozí hodnota je OneWay pro normální vlastnosti svázatelné a OneWayToSource pro vlastnosti s možností vazby jen pro čtení.

Poznámka:

Výčet BindingMode nyní zahrnuje OnTime také použití vazby pouze v případě, že se kontext vazby změní, a ne při změně zdrojové vlastnosti.

Vlastnosti, které jsou pravděpodobně cílem datových vazeb ve scénářích MVVM, mají obecně hodnotu DefaultBindingMode TwoWay. Jedná se o:

  • Value majetku Slider a Stepper
  • IsToggled majetku Switch
  • Text majetku Entry, Editora SearchBar
  • Date majetku DatePicker
  • Time majetku TimePicker

BindingModes ukázka ukazuje čtyři režimy vazby s datovou vazbou, kde cíl je FontSize vlastnost Label a zdroj je Value vlastnost Slider. To umožňuje Slider každému řídit velikost písma odpovídajícího Label. Ale Slider prvky nejsou inicializovány, protože DefaultBindingMode vlastnost FontSize je OneWay.

Ukázka ReverseBinding nastaví vazby na Value vlastnost Slider odkazující FontSize na vlastnost každého Label. Zdá se, že je to zpětně, ale funguje lépe při inicializaci Slider prvků, protože Value vlastnost Slider má hodnotu DefaultBindingMode TwoWay.

Trojitý snímek obrazovky s reverzní vazbou

To je podobné tomu, jak jsou vazby definovány v MVVM a tento typ vazby použijete často.

Formátování řetězců

Pokud je cílová vlastnost typu string, můžete použít StringFormat vlastnost definovanou BindingBase k převodu zdroje na .string StringFormat Nastavte vlastnost na formátovací řetězec .NET, který byste použili se statickým String.Format formátem k zobrazení objektu. Při použití tohoto formátovacího řetězce v rámci rozšíření značek ho obklopte jednoduchými uvozovkami, takže složené závorky nebudou omylem za vložené rozšíření značek.

Ukázka ShowViewValues ukazuje, jak se používá StringFormat v XAML.

Ukázka WhatSizeBindings ukazuje zobrazení velikosti stránky s vazbami na Width vlastnosti Height objektu ContentPage.

Proč se tomu říká "Cesta"?

Vlastnost Path Binding je volána, protože může být řadou vlastností a indexerů oddělených tečkami. Ukázka BindingPathDemos ukazuje několik příkladů.

Převaděče hodnot vazeb

Pokud jsou zdrojové a cílové vlastnosti vazby různé typy, můžete převést mezi typy pomocí převaděče vazeb. Toto je třída, která implementuje IValueConverter rozhraní a obsahuje dvě metody: Convert převést zdroj na cíl a ConvertBack převést cíl na zdroj.

Třída IntToBoolConverter v knihovně Xamarin.FormsBook.Toolkit je příkladem převodu na .boolint Ukazuje se ukázkou ButtonEnabler, která povoluje Button pouze v případě, že byl do znaku Entryzadán alespoň jeden znak .

Třída BoolToStringConverter převede hodnotu bool na a string definuje dvě vlastnosti, které určují, pro jaký text má být vrácen false a true hodnoty. Je BoolToColorConverter to podobné. Ukázka SwitchText ukazuje použití těchto dvou převaděčů k zobrazení různých textů v různých barvách na Switch základě nastavení.

Obecný BoolToObjectConverter může nahradit BoolToStringConverter a BoolToColorConverter sloužit jako generalizovaný boolpřevaděč -to-object libovolného typu.

Vazby a vlastní zobrazení

Vlastní ovládací prvky můžete zjednodušit pomocí datových vazeb. NewCheckBox.cs Soubor kódu definuje Text, , TextColor, FontSizeFontAttributes, a IsChecked vlastnosti, ale nemá žádnou logiku pro vizuály ovládacího prvku. Místo toho NewCheckBox.cs.xaml soubor obsahuje všechny značky vizuálů ovládacího prvku prostřednictvím datových vazeb na Label prvky na základě vlastností definovaných v souboru kódu.

Ukázka NewCheckBoxDemo demonstruje NewCheckBox vlastní ovládací prvek.