This article is currently in the process of being translated into Hungarian (~97% done).
Using the DataContext
A DataContext tulajdonság az összerendelések alapértelmezett forrása, kivéve, ha kifejezetten deklarál egy másik forrást, ahogyan azt az előző fejezetben tettük az ElementName tulajdonsággal, a FrameworkElement osztályban van definiálva, amelyből a legtöbb UI vezérli, beleértve az WPF ablakot is. Egyszerűen fogalmazva, az lehetővé teszi az kötések alapjának megadását.
A DataContext tulajdonsághoz nincs alapértelmezett forrás (ez egyszerűen nulla a kezdetektől), de mivel a DataContext a vezérlőhierarchián keresztül lefelé öröklődik, be lehet állítani egy DataContext-et magának az ablaknak, majd használhatja az összes alárendelt (gyermek) vezérlőben. Próbáljuk meg szemléltetni ezt egy egyszerű példával:
<Window x:Class="WpfTutorialSamples.DataBinding.DataContextSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DataContextSample" Height="130" Width="280">
<StackPanel Margin="15">
<WrapPanel>
<TextBlock Text="Window title: " />
<TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150" />
</WrapPanel>
<WrapPanel Margin="0,10,0,0">
<TextBlock Text="Window dimensions: " />
<TextBox Text="{Binding Width}" Width="50" />
<TextBlock Text=" x " />
<TextBox Text="{Binding Height}" Width="50" />
</WrapPanel>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.DataBinding
{
public partial class DataContextSample : Window
{
public DataContextSample()
{
InitializeComponent();
this.DataContext = this;
}
}
}
Ez a példa a csak egy sor érdekes kódot ad hozzá: A szabványos InitalizeComponent() hívás után a "this" hivatkozást hozzárendeljük a DataContexthez, amely alapvetően csak azt mondja meg az ablaknak, hogy saját magát akarjuk adatkörnyezetként használni.
Az XAML-ben, az ablakban ezt a tényt használjuk fel, beleértve a Title, a Width és a Height tulajdonságot. Mivel az ablaknak DataContext tulajdonságai vannak, amelyeket a alárendelt (gyermek) vezérlőknek továbbítanak, nem kell minden egyes összerendeléshez forrást megadnunk – csak úgy használjuk az értékeket, mintha globálisan elérhetőek lennének.
Próbálja meg futtatni a példát, és átméretezni az ablakot – látni fogja, hogy a méretváltozások azonnal megjelennek a szövegdobozokban. Megpróbálhat más címet is beírni az első szövegdobozba, de meglepőmódon, ez a változás nem jelenik meg azonnal. Ehelyett át kell helyeznie a fókuszt egy másik vezérlőelemre a módosítás alkalmazása előtt. Miért? Nos, ez a következő fejezet témája.
Összegzés:
A DataContext tulajdonság használata olyan, mintha minden kötés alapvetően lejjebb kerülne a vezérlők hierarchiáján. Ez megkíméli Önt az egyes kötések forrásának manuális megadásával járó fáradságtól, és ha valóban elkezdi használni az adat-hozzárendeléseket, biztosan értékelni fogja a megspórolt időt és gépelést.
Ez azonban nem jelenti azt, hogy ugyanazt a DataContextet kell használnia az ablakon belüli összes vezérlőhöz. Mivel minden vezérlőnek saját DataContext tulajdonsága van, könnyen megszakíthatja az öröklődési láncot, és felülírhatja a DataContext-et egy új értékkel. Ez lehetővé teszi, hogy olyan dolgokat tegyen, mint például egy globális DataContext az ablakon, majd egy lokálisabb és specifikusabb DataContext-et pl. egy panelben egy táblával vagy ehhez hasonló.