2013. március 29., péntek

Wpf #1 adatkötés

A WPF használata során előbb vagy utóbb felmerül a kérdés, hogy az egyes adatok vizuális megjelenítéséhez nem-e létezik egyszerűbb módszer? Az adatkötés fogalma hosszú utat járt be mire a procedurális kódot felváltotta a deklaratív megvalósítás, és ez az egyik hatalmas erőssége a WPF-nek, amelyet azonban sajnos nagyon kevesen használnak ki. 

Kódból szerkesztve az alábbi pár sor könnyen kezelhetőnek tűnik és elég sokszor még profi fejlesztők is használják, leginkább a látszólagos gyorsasága miatt.
<TextBox Name="MyTextBox" Text=""/>
MyTextBox.Text = "tetszőleges szöveg";

A fenti kód egyik leggyengébb része, hogy amennyiben a TextBox szöveg részét a programunkban több helyen is változtatni szeretnék, a kódunk mindannyiszor ismételni kell. Ugyan a értékadó kód elhelyezhető egy metódusban, de a TextBoxok számának növelésével ez nagyon gyorsan kezelhetetlenné válik.

További nagy probléma, hogy amennyiben a TextBox tartalmát más szálból kell változtatni, úgy a Dispatchert kell igénybe venni vagy a Task befejeztével új task-ot kell indítani ami a a WPF saját szálljában fut le

 Lényegesen egyszerűbb az adatkötést igénybe venni és minden további teendőt a WPF-re hagyni.
A legegyszerűbb adatkötés mindössze pár sort igényel.

A mögöttes kód:
public partial class MainWindow : Window
{
    public int TextValue { get; set; }

    public MainWindow()
    {
        TextValue = 5;
        InitializeComponent();
        DataContext = this;
    }
}

Az XAML kód pedig:
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TextBox Width="100" Height="20" Text="{Binding TextValue}"/>
    </Grid>
</Window>

Az adatkötés három fontos eleme:
- Egy publikus tulajdonság. Egy tagváltozó publikussá tétele nem elég, a WPF tulajdonságokon keresztül kommunikál. (Ez most jelen esetben a TextValue)
- Az adatforrás beállítása. (DataContext = this). A DataContext nem csak a dokumentum egészére,hanem bármely WPF elemre egyénileg beállítható. Pl. GridName.DataContext = this
- A kötés beállítása. (Text="{Binding TextValue}").

A TextValue property bármilyen típusú lehet, a WPF elvégzi a szükséges konvertálást, hogy a TextBox Text attributuma felvehesse az értékét. Nem számít, hogy az double, float vagy bool. Az aktuális értéke lesz látható a képernyőn.

Az adatkötéshez mindössze ezen alapok ismeretére van szükség. Használatával a kód szebb és jobban áttekinthetőbb, könnyebben nyomon követhetőbbé válik.

Nincsenek megjegyzések:

Megjegyzés küldése