Novinky ve WPF 4 – bindable Run
V dnešním povídání si o novinkách v .NET Frameworku verze 4.0 se podívám opět na oblast, kterou jsem zmínil již minule a tou je Binding.
Run.Text
Už od prvních chvil, kdy světlo světa spatřilo WPF byla vlastnost Text třídy Run normální CLR property a tak bylo možné určovat, jaký text bude zobrazen v uživatelském rozhraní u uživatele. Co však bylo značnou nevýhodou bylo, že v okamžiku, kdy jsme chtěli a potřebovali měnit zobrazený text, tak jsme toto nemohli učinit jednoduše, neboť tato vlastnost Text nebyla typu DependencyProperty. Bylo tak nutné přerušit tok dokumentu, nejčastěji elementem TextBlock, a tomu nastavit požadovaný Binding na měnící se text.
TextBlock zapojený do FlowDocumentu
Jak také mohl vypadat takový text v kombinaci s elementem TextBlock vidíte na následujícím obrázku. Pro lepší demonstraci k čemu může dojít připojuji dvojí pohled:
Že se vám na tom něco nezdá? Pro jistotu se podívejme, jak vypadal takový zápis ve FlowDocumentu:
<Window.Resources> <TextBox x:Key="DataStore1" Text="špatně umístěn, když použijeme TextBlock" /> </Window.Resources> <FlowDocument> <Paragraph> <Run Text="Příklad toho, jak dokáže být text " /> <TextBlock Text="{Binding Source={StaticResource DataStore1}, Path=Text}" /> <Run Text=" uprostřed elementu Run." /> </Paragraph> </FlowDocument>
Bindable Run
Tento neduh s nevhodným zakomponováním elementu TextBlock však nemusíme od verze WPF 4.0 řešit a můžeme námi požadovaný text poskládat z jednotlivých elementu Run. Přesně tak, od této verze je vlastnost Text této třídy vedena jako DependencyProperty a tak můžeme využít všech výhod Bindingu, tady se tedy sluší podotknout, že se jedná o OneWay data binding. Obousměrný data binding je pak podporován jen částečně a v některých případech tak může dojít ke ztrátě informace o bindingu.
Jak potom vypadá tok textu s použitím bindingu na element Run předvádí následující obrázek:
A samozřejmě ještě přidám výpis XAMLu pro tento případ:
<Window.Resources> <TextBox x:Key="DataStore1" Text="špatně umístěn, když použijeme TextBlock" /> </Window.Resources> <FlowDocument> <Paragraph> <Run Text="Příklad toho, jak dokáže být text " /> <Run Text="{Binding Source={StaticResource DataStore1}, Path=Text}" /> <Run Text=" uprostřed elementu Run." /> </Paragraph> </FlowDocument>
Závěrem
V tomto článku jsem představil další z novinek ve WPF 4.0 a to bindable Run. V článku příštím nás čeká poslední novinka, která se udála na poli data bindingu a která velice úzce souvisí i se změnou a rozšířením samotného .NET Frameworku ve verzi 4.0.
Komentáře