TOC

This article has been localized into Swedish by the community.

Databindning:

Använda "DataContext"

Egenskapen "DataContext" är standardkälla till alla bindningar, såvida du inte specificerar en annan källa, som vi gjorde i förra kapitlet med egenskapen "ElementName". Denna definieras i klassen "FrameworkElement". De flesta UI-komponenter, som t. ex. "WPF Window", härleds från denna klass. Du kan själv specificera en bas för dina bindningar.

Det finns ingen standardkälla för egenskapen "DataContext" (den är "null" vid starten), men eftersom "DataContext" är en nedärvd egenskap genom styrkomponenthierarkin, kan du definiera "Window" att utgöra ditt "DataContext" och sedan använda detta för alla "child"-komponenter. Låt oss illustrera detta med ett exempel:

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

I detta exampel har vi endast lagt till en rad med c#-kod: Efter det sedvanliga anropet "InitialComponent()" låter vi "DataContext" referera till "this", vilket betyder att "Window" kommer att utgöra "DataContext".

I XAML-koden kan vi utnyttja detta för att binda flera "Window"-egenskaper som "Title", "Width" och "Height". Eftersom "Window" har "DataContext" behöver vi inte definiea en källa för varje bindning - vi använder helt enkelt egenskaperna som om de vore globalt tillgängliga.

Kör exemplet på din dator och ändra storleken på fönstret - du kommer att upptäcka att ändringar av fönstrets storlek återspeglas i textrutorna. Du kan också skriva in en annan titel i den översta textrutan, men du kanske blir förvånad att titeln inte ändras direkt. Du måste flytta fokus till en annan kontroll innan ändringen verkställs. Varför är det så? Detta återkommer vi till i nästa kapitel.

Sammanfattning

Att använda "DataContext" innebär att man sätter en bas för alla bindningar ner genom kontrollhierarkin. Detta gör att du slipper att definiera källan till varje bindning. När du väl börjat använda databindningar kommer du absolut att uppskatta tidsbesparingen som dessa ger dig.

Detta innebär dock inte att du måste använda samma "DataContext" för alla kontroller i ett fönster. Eftersom varje kontroll har sin egen "DataContext"-egenskap kan du lätt ersätta den nedärvda med ett nytt värde. Härigenom kan du definiera en global "DataContext" för ditt fönster medan en lokal, specifik "DataContext" används för t. ex. en panel med ett separat formulär.


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!