This article has been localized into Slovak by the community.
Použitie DataContext
Vlastnosť DataContext je predvolený zdroj vašich väzieb, pokiaľ výslovne nedeklarujete iný zdroj, ako sme to urobili v predchádzajúcej kapitole s vlastnosťou ElementName. Definuje sa v triede FrameworkElement, z ktorej dedí väčšina používateľských ovládacích prvkov vrátane okna WPF. Jednoducho povedané, umožňuje vám určiť základ pre vaše väzby
Neexistuje žiadny predvolený zdroj pre vlastnosť DataContext (je jednoducho nulový na začiatku), ale keďže je DataContext dedený smerom nadol v hierarchii prvkov, môžete nastaviť DataContext pre samotné okno a potom ho použiť vo všetkých podriadených ovládacích prvkoch. Skúsme si to ilustrovať na jednoduchom príklade:
<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;
}
}
}
V kóde tohoto príkladu je pridaný len jeden riadok zaujímavého kódu: po štandardnom volaní InitalizeComponent() priradíme odkaz "this" ako DataContext, ktorý v podstate len informuje okno, že chceme, aby okno samotné bolo DataContext.
V XAML sa táto skutočnosť viaže na niekoľko vlastností okna vrátane Title, Width a Height. Keďže okno má DataContext, ktorý je odovzdaný do podriadených ovládacích prvkov, nemusíme pro každom bindingu definovať zdroj - používame iba hodnoty akoby boli globálne dostupné.
Skúste spustiť príklad a zmeniť veľkosť okna - uvidíte, že zmena rozmerov sa ihneď odrazí v textových poliach. Môžete tiež skúsiť napísať iný názov do prvého textového poľa, ale možno vás prekvapí, že táto zmena sa neodrazí okamžite. Namiesto toho musíte presunúť focus na iný ovládací prvok predtým, ako sa vykoná zmena. Prečo? No, to je téma pre ďalšiu kapitolu.
Zhrnutie
Použitie vlastnosti DataContext je ako nastavenie základne pre všetky väzby smerom nadol v hierarchii ovládacích prvkov. To vám ušetrí manuálne definovanie zdroja pre každú väzbu a keď naozaj začnete používať data binding, určite oceníte ušetrený čas a písanie.
To však neznamená, že musíte použiť rovnaký DataContext pre všetky ovládacie prvky v okne. Pretože každá kontrolka má vlastnú vlastnosť DataContext, môžete ľahko prepísať DataContext novou hodnotou. To vám umožní robiť veci ako mať globálny DataContext v okne a potom lokálny a špecifickejší DataContext, napr. panel udržujúci samostatný tvar, alebo niečo podobné.