TOC

This article is currently in the process of being translated into Hungarian (~97% done).

Data binding:

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ó.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!