TOC

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

Data binding:

Using the DataContext

Duomenų kontekstas (DataContext) yra numatytasis duomenų šaltinis visiems duomenų siejimams, nebent yra aprašomas ir nurodomas kitas duomenų šaltinis, kaip kad darėme praeituose skyriuje su ElementName atributu. Šis atributas aprašytas FrameworkElement klasėje, kurią paveldi dauguma UI valdiklių, įskaitant ir "WPF Window". Jei paprasčiau, jis leidžia nurodyti duomenų siejimo pagrindą.

DataContext atributas neturi numatytosios reikšmės (jo reikšmė pradžioje yra null), bet DataContext yra paveldimas per valdiklio hierarchija, tu gali nustatyti DataContext atributo reikšmę pačiam lango valdikliui ir tada jį naudoti visuose vaiko elementuose. Pavaizduokime tai paprasčiausiu pavyzdžiu:

<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;
		}
	}
}

Šio pavyzdžio backend'o kodas prideda 1 įdomią eilutę: Po standartinio InitalizeComponent() funkcijos iškvietimo, priskiriame "this" nuorodą duomenų kontekstui (DataContext), kuris iš esmės tiesiog informuoja "Window" elementą kad jis pats yra duomenų kontekstas.

XAML lango aprašemes naudojame kelias Window atributo ypatybes, tame tarpe ir pavadinima, plotį ir aukštį. Kadangi window elementas turi DataContext atributą (kurį paveldi iš "FrameworkElement" klasės hierarchija žemyn (FrameworkElement > Control > ContentControl > Window ) ) mums nereikia apibrėžti duomenų šaltiniokiekvienam duomenų siejimui - mes tiesiog naudojame šias reikšmes taip tarsi jos būtų pasiekiamos globaliai.

Pabandyk paleisti pavyzdį ir keisdamas lango dydį pastebėsi, jog keičiasi ir reikšmės teksto laukuose. Jei pabandysi pakeisti pavadinimą teksto lauke pastebėsi jog lango pavadinimas iš karto nesikeičia. Vietoj to turi paspausti ant kito elemento (ne pavadinimo textbox'o) kad pamatytum šį pakeitimą. Kodėl ? Na tai paaiškinsime kituose skyriuose.

Apžvalga

Naudotis DataContext atributu yra tas pas kas nustatyti visų duomenų siejimo pagrindą per valdiklių hierarchija. Tai padeda išvengti rankinio duomenų šaltinio kiekvienam siejimui apibrėžimo ir kuomet pradėsi dažniau naudoti duomenų siejimą, įvertinsi sutaupytą laiką ir jkodo rašymą.

Tačiau tai nereiškia kad privalai naudoti tą patį DataContext atributąvisiems Window vaiko elementams. Kadangi kiekvienas elementas turi savo nuosavą DataContext atributą, tu gali nutraukti paveldėjimo grandinę ir priskirti DataContext naują reikšmę. Tai leidžia tau naudoti globalų DataContext pridėtą window elementui, bet karu lokalesnį ir specifiškesnį DataContext.


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!