RAD Studio XE3 přidává novou vlastnost nazvanou Visual LiveBindings. Podle mne se jedná o nejzásadnější rozšíření od dob Delphi 1. I proto je to těžké vysvětlovat, protože se jedná o úplně novou oblast a musím od základů, navíc mnohem hůře se to popisuje než používá. Použití je jak pro VCL, tak pro FMX.
Návrhář je dostupný přes menu View | LiveBindings Designer (nebo popmenu a Bind Visually – lze v options vypnout)
LiveBindings Designer (LBD) funguje jednak s novými komponentami, druhak jsou některé staré komponenty rozšířeny o jeho podporu. LBD rozšiřuje myšlenky podpory pro LB z XE2 tak, že nemusíte psát skoro žádný kód a navíc to funguje i pro VCL. V XE2 byla podpora pro "managed expressions" - podpora zůstává, ale nově jsou komponenty rozšířeny o vzor “Observers to listen to events”.
S "managed expressions" system detekoval změny a předal je dál přes různé "managed expressions". Nové LiveBindings jednoduše naslouchají vstupu od uživatele a via rozšíření Observer, které je implementováno na různých komponentách, je provedena reakce. Observer v podstatě nahrazuje události (např. OnClick, OnChange atd).
Osobně si myslím, že implementace v XE2 byla šita horkou jehlou a nejlepší je ji nepoužívat. Je to rozdíl jako tahat komponentu v designeru nebo ji vytvářet za běhu.
Vložte na formulář CheckBox. V LBD se ukáže jako blok s názvem a property Checked, tj. property, která je primární pro propojení.
Nyní přidáme GroupBox. GroupBox má take property, ale není určen k vstupu od uživatele, takže nelze propojit ve směru GroupBox a CheckBox, ale naopak to jde (Caption může zobrazovat výsledek). Takže nakreslíme propojovací čáru mezi komponentami. Tímto máme vytvořeno naše první LiveBinding.
Pokud nyní spustíme aplikaci, tak při klikání na CheckBox se mění Caption GroupBoxu na True nebo False.
Mimochodem natažením linku se automaticky přidala nevizuální komponenta BindingsList. Poklepáním na tuto komponentu uvidíte seznam propojení.
Obecně se o tento seznam nemusíte starat, ale je vhodné chápat jak to celé funguje. Při použití LBD je každá linka reprezentována v programu jednou komponentou, v našem případě je to instance LinkControlToProperty, na kterou můžete klepnout a tak ji zobrazit v Object Inspectoru.
Tím se dostáváme k tomu, co máme v základu za komponenty (stiskem INS, nebo ikonu v binding editor dostanete nabídku):
Visual LBD používá komponenty ze sekce Quick Bindings, ale dokáže zobrazit (ne vytvářet) i komponenty z XE2.
V našem příkladu máme Control, Component a ComponentProperty =Caption. Změnou ComponentProperty na Visible (výběr z dostupných x property) změníme chování a checkbox bude ovládat viditelnost.
Postoupíme dále. Přidejme na formulář TListBox, klasickou starou dobrou old-school komponentu dostupnou od Delphi 1. Do property Items dáme několik položek a pravá myš nám umožní Bind Visually. Námi hledaná property je SelectedItem (co dělá je jasné).
Takže propojíme GroupBox1.Caption a ListBox1.SelectedValue. Někde v hlubinách má Observer pro TListBox, že pro vazbu SelectedValue a string vrací text vybrané položky (co jiného taky že?). Nyní se po spuštění programu bude měnit Caption komponenty GroupBox dle aktuálně položky ListBoxu.
Upozorním na zajímavou věc. Pokud manuálně nastavíme Caption groupboxu na některou z položek Listboxu a v designmode u linku vypneme a zapneme property AutoActivate (tj. True-False-True), tak se v ListBoxu vybere položka, která odpovídá Caption GroupBoxu (ListBox se snaží o sync). To mimochodem znamená, že při startu aplikace se VB snaží o synchronizaci (i když normálně je link jednosměrný, tj. ListBox > Caption).
Samozřejmě, že jde nastavovat i jiné property (a to i zároveň – prostě provedeme více propojení) – jejich seznam je dostupný při kliknutí na … ve VLB, jako příklad můžu uvést With, ale i mnohem složitější property.
Samozřejmě pokud se snažíte přiřadit textovou položku do integer property tak dostanete vyjímku, protože program neví jak provést konverzi. Ve skutečnosti je zabudováno několik konvertorů dat (např. string to int), ale pokud to nestačí, můžete použít Expressions. Vyberte link (SelectedItem to Caption) a v ObjectInspectoru úplně dole je možnost Expressions…
Toto je předgenerovaný výraz z Quick Binding.
Všimněte si, že vlevo je vybraná volba Format. Tento výraz je použit při přiřazení z Control > Source (ListBox na Caption).
Pokud vyberete Parse tak se jedná o opačný směr.
Clear by mělo být použito při odpojení.
Pokračování příště
Datum: 2012-11-22 22:41:00 Tagy: XE3, LiveBinding, VCL, FireMonkey