TOC

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

Data binding:

Using the DataContext

Властивість DataContext за замовчуванням є джерелом ваших прив'язок, якщо ви спеціально не оголосили інше джерело, як ми це зробили в попередньому розділі з властивістю ElementName. Вона визначена у класі FrameworkElement, від якого успадковується більшість елементів інтерфейсу користувача, включаючи вікно WPF. Простіше кажучи, це дозволяє вказати основу для ваших прив'язок.

Для властивості DataContext немає джерел за замовчуванням (це просто null з самого початку), але оскільки DataContext успадковується через ієрархію керування, ви можете встановити DataContext для самого Window, а потім використовувати його у всіх дочірніх елементах керування. Спробуємо проілюструвати це простим прикладом:

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

Код для цього прикладу тільки додає один рядок цікавого коду: Після стандартного виклику InitalizeComponent () ми призначаємо посилання “this” на DataContext, який в основному просто вказує Window, що ми хочемо аби він сам був контекстом даних.

У XAML ми використовуємо цей факт для прив'язки до декількох властивостей Window, включаючи Title, Width і Height. Оскільки у вікні є DataContext, який передається до дочірніх елементів управління, нам не потрібно визначати джерело на кожній з прив'язок - ми просто використовуємо ці значення, так, якщо б вони були глобально доступними.

Спробуйте запустити приклад і змінити розмір вікна - ви побачите, що зміни розмірів відразу відображаються в текстових полях. Ви також можете спробувати написати іншу назву в першому текстовому полі, але ви будете здивовані, побачивши, що ця зміна не відображається одразу. Замість цього потрібно перемістити фокус до іншого елемента керування, перш ніж буде застосовано зміну. Чому? Це тема для наступної глави.

Summary

Використання властивості DataContext є подібним до встановлення бази всіх прив'язок вниз через ієрархію елементів керування. Це оберігає вас від ручного визначення джерела для кожної прив'язки, і коли ви дійсно почнете використовувати прив'язки даних, ви, безумовно, оціните збережений час.

Однак це не означає, що ви повинні використовувати один і той самий DataContext для всіх елементів керування у вікні. Оскільки кожен елемент керування має власну властивість DataContext, можна легко розірвати ланцюжок успадкування і перевизначити DataContext з новим значенням. Це дозволяє робити такі речі, як глобальний DataContext у вікні, а потім більш локальний і конкретний 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!