Text Enhancement in WPF 4.0 – Bindable Run

Melengkapi rangkaian postingan mengenai fitur Teks di WPF 4.0, kali ini saya ingin memberikan gambaran mengenai fitur “Bindable Run”. Bagi Anda yang terbiasa memegang WPF sebelumnya, properti Run.Text merupakan bagian dari CLR biasa. Efeknya, bakalan susah untuk melakukan data-binding terhadap Run.Text tersebut. Kekurangan ini biasanya bisa ditutupi dengan mengganti Run menjadi pemanggilan TextBlock secara manual (agar bisa di-bind). Maksud saya seperti ini:

<Run Text="Kalo pake Run biasa, gak bisa di-bind kayak TextBlock dibawah ini"/>
<TextBlock Text="{Binding Source= {StaticResource namaResource}, Path=Text}"/>

Sudah terbayang? :) Nah tapi seringkali dengan menggunakan kombinasi penggunaan Run & binding TextBlock seperti diatas, hasilnya bisa kacau, flow teks nya jadi berantakan. Tidak percaya? Baca postingan ini sampai bawah, saya akan tunjukkan screenshotnya :)

Kekurangan seperti inilah yang memicu banyak solusi dari programmer-programmer kreatif yang mencoba “mengakali” agar Run.Text dapat menjadi depedency property. Contohnya disini dan disini. Namun sekarang itu ngga perlu lagi, karena di WPF 4.0 Run.Text tidak lagi merupakan properti CLR biasa, namun kini telah berubah menjadi suatu dependency property. Hal ini berarti kita telah mendapatkan sebuah bindable run! Sintaksnya kira-kira seperti ini, singkat sekali:

<Run Text="{Binding Source={StaticResource namaResource}, Path=Text}"/>

Sekarang perhatikan perbedaannya di FlowDocument sederhana yang saya buat berikut:

image

Lihat bagaimana flow dari teks paragraf pertama tampak berantakan, karena terkadang programmer turut memasukkan white-empty space misalnya menekan tombol Enter/spacing berlebihan saat menjalankan Run.Text. Berikut kode aslinya sebagai perbandingan:

<Window.Resources>
    <TextBox x:Key="Kalimat1" Text="bagaimana flow dokumen jadi H A N C U R ketika kita"/>
    <TextBox x:Key="Kalimat2" Text="Ini paragraf contoh bagaimana flow dokumen menampilkan 
data yang seharusnya. Run Text dapat di-bind langsung!"/>
</Window.Resources>

<FlowDocument>
    <Paragraph>
        <Run Text="Ini paragraf contoh"/>
        <TextBlock Text="{Binding Source= {StaticResource Kalimat1}, Path=Text}"/>
        <Run Text="menggunakan kombinasi dari 
                        Run Text dan TextBlock 
             secara manual"/>
    </Paragraph>
    <Paragraph>
        <Run Text="{Binding Source={StaticResource Kalimat2}, Path=Text}"/>
    </Paragraph>
</FlowDocument>

Dengan adanya bindable run, kode pemanggilan pun jadi cukup sebaris aja :) Sederhana bukan?

One-way Binding? Two-way Binding?

Untuk masalah penggunaan bindable run ini, one-way data binding (searah) telah sepenuhnya didukung. Contohnya persis seperti diatas, Run dapat di-bind ke suatu datasource dan ketika dijalankan, Run Text tersebut akan menghasilkan teks yang sama dengan kemunculan di data source.

Sedangkan untuk data-binding dua arah (two way data binding), tidak sepenuhnya didukung (hanya parsial saja). Misalnya, jika Run tersebut akan terupdate melalui panggilan properti sistem di WPF, maka datasource tempat Run di-bind pun akan ikut berubah. Sedangkan kalo misalnya Run terupdate melalui kontrol semacam RichTextBox misalnya, maka binding-nya akan lepas. Rada susah ngejelasinnya pake kata-kata, hehe..

:)

Yasudah sekian saja postingan kali ini, semoga berguna..

Cheers….

PS: Postingan ini merupakan bagian dari rangkaian tulisan mengenai fitur teks terbaru lainnya di WPF 4.0. Yang sebelumnya telah saya bahas, antara lain:

A. Text Clarity: Text Formatting & Text Rendering

B. Caret & Selection Brush.

Share this post: | | | |
Published Friday, March 26, 2010 1:21 PM by Umi Fadilah

Comments

# Twitter Trackbacks for Text Enhancement in WPF 4.0 ??? Bindable Run - Umi Fadilah [netindonesia.net] on Topsy.com

Pingback from  Twitter Trackbacks for                 Text Enhancement in WPF 4.0 ??? Bindable Run - Umi Fadilah         [netindonesia.net]        on Topsy.com

Powered by Community Server (Commercial Edition), by Telligent Systems