TOC

This article has been localized into Danish by the community.

Databinding:

Brug af DataContext

DataContext egenskaben er standardkilden til dine bindinger med mindre, du specifikt erklærer en anden kilde, som vi gjorde i forrige afsnit med ElementName egenskaben. Den er defineret på FrameworkElement klassen, som de fleste UI kontroller - inklusive WPF Window - nedarver fra. Helt simpelt tillader det dig at definere grundlaget for dine bindinger.

Der er ikke nogen standardkilde til DataContext egenskaben (den er null fra begyndelsen), men eftersom en DataContext nedarves ned gennem kontrolhierarkiet, kan du angive en DataContext for Window instansen selv og derefter bruge den i alle underordnede kontroller. Lad os illustrere med et simpelt eksempel:

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

Code-behind i dette eksempel tilføjer kun en interessant linje kode. Efter det normale InitializeComponent() kald tildeler vi "this" referencen til DataContext egenskaben, hvilket bare fortæller Window instansen, at vi ønsker, at det skal være datakonteksten.

I XAML-definitionen bruger vi dette faktum til at binde til flere af Window-egenskaberne inklusive Title, Width og Height. Siden vinduet har en DataContext, som er overført til de underordnede kontroller, behøver vi ikke definere en kilde på hver af disse bindinger - vi bruger bare værdierne som om de var globalt tilgængelige.

Prøv at køre eksemplet og ændr størrelsen på vinduet - du vil se, at størrelsesændringerne bliver afspejlet med det samme i tekstboksene. Du kan også prøve at skrive en anden titel i den første tekstboks, men det vil måske overraske dig at se, at denne ændring ikke afspejles med det samme. I stedet er du nødt til at flytte fokus til en anden kontrol, før ændringerne bliver anvendt. Hvorfor? Tja, det er emnet for næste afsnit.

Resume

Ved hjælp af DataContext egenskaben er det let at sætte grundlaget for alle bindinger ned gennem kontrolhierarkiet. Dette sparer dig for en masse manuelt arbejde med at definere en kilde for hver binding, og når du virkelig begynder at bruge databinding, vil du helt sikkert værdsætte den tid og tastearbejde, der spares.

Men det betyder ikke, at du er nødt til at bruge den samme DataContext til alle kontroller i et Window. Siden hver kontrol har sin egen DataContext egenskab, kan du nemt bryde nedarvningskæden og overstyre DataContext med en ny værdi. Dette tillader dig at gøre ting som at have en global DataContext på vinduet og en lokal og mere specifik DataContext på f.eks. et panel, som indeholder en selvstændig formular eller noget i den retning.


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!