XAML.cz Magazín moderních technologií založených na XAML

Novinky ve WPF 4 – bindable Run

Napsáno pro WPF od Jarda Jirava  [04.05.2010]

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:

Run-TextBlock

Ž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:

Run-Run

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

ukládám komentář, vyčkejte prosím..
  1. Buďte první, kdo napíše komentář.

@xamlcz

  • RT @jvanrhyn: XAML, It's a bit like olives. Takes a while to get used to. But once you're used to it. It is actually pretty good. <3 XAML
  • RT @moser_christian: WPF Inspector 0.9.7 is released. It supports .NET 3.5 and 4.0 The project is now open source and available on CodeP ...
  • Jeff Handley oznámil vydání WCF RIA Services v.1.0 SP1 RTM http://bit.ly/gOgckn ke stažení na http://bit.ly/gVAXdK
  • jedna výzva pro Brno. Byl někdo z vás na přednášce o RIA v MS Akvárku? Dejte o sobě vědět. Děkuji
  • také jste uvažovali o tom, že zkusíte na projekt použít Caliburn Micro nebo naopak Prism 4? A co tak obojí, šlo by to nebo ne? Již brzy