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.