Jak nastavit výchozí mód pro x:Bind v UWP

Uno Platform WinUI

4 years ago

Skvělou novinkou v Universal Windows Platform XAMLu oproti WPF je {x:Bind}. Pomocí něho se data-binding vhodnocuje v čase kompilace, namísto nutnosti provádět reflexi, což je nejen překlepu-vdornější, ale zároveň zvyšuje výkon za běhu. Jediná "otravnost" oproti klasickému {Binding} je odlišné výchozí nastavení jeho módu – namísto OneWay používá OneTime. Ačkoliv toto opět napomáhá lepšímu výkonu pro neměnná data, je až nepříjemně snadné zapomenout explicitně uvést OneWay tam, kde je to třeba. Navíc, pokud zobrazujeme více hodnot z měnícího se datového zdroje, je nutnost pokaždé uvádět Mode . Naštěstí existuje řešení!

x:DefaultBindMode

V SDK verze 14393 přibyl nový atribut x:DefaultBindMode . Tato funkce umožňuje nastavit výchozí mód {x:Bind} pro element a jeho děti v XAML stromě. Uveďme si jako příklad následující úryvek XAMLu:

Protože mód nebyl explicitně nastaven, je OneTime a po iniciálním vyhodnocení hodnot se dále změny neprojeví. Nyní to změňme pomocí x:DefaultBindMode:

A je to – všechny TextBlock elementy se budou nyní měnit svůj text při každé změně navázaných vlastností. Abychom si to ještě více usnadnili, pokud víme že v daném XAML souboru budou všechny bindingy nejspíše dynamické, můžeme změnit x:DefaultBindMode na úrovní root elementu:

Samozřejmě je také snadné nastavení kdykoliv explicitně přepsat:

Zatímco TextBlock použije OneWay mód, TextBox použije TwoWay. Skvělé využití má DefaultBindMode také při vývoji formulářů. Můžeme snadno nastavit výchozí hodnotu na TwoWay a nadále na mód nemusíme pamatovat:

x:DefaultBindMode je malá, ale velmi praktická vlastnost XAMLu, která práci s x:Bind opravdu zjednodušuje! WinUI