TOC

This article has been localized into Spanish by the community.

Ligado de datos:

Usando el DataContext

La propiedad DataContext es la fuente de tus bindings por defecto, a menos que declares otra fuente específicamente, como hicimos en el capítulo anterior con la propiedad ElementName. Está definida en la clase FrameworkElement, de la que la mayoría de los controles de la UI (Interfaz de Usuario), incluyendo Window de WPF heredan. Simplemente pones y te permite especificar la base para todos tus bindings

No hay una fuente por defecto para la propiedad DataContext (es sencillamente null desde el inicio), pero ya que DataContext es heredado hacia abajo por la jerarquía de control, puedes establecer un DataContext para la ventana y luego usarla a lo largo de todos sus controles hijos. Tratemos de ilustrar esto con un simple ejemplo:

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

El Code-behind de este ejemplo solamente agrega una línea de código interesante: Después de la usual llamada a InitializeComponent(), asignamos la referencia "this" a DataContext, que básicamente sólo le dice a la ventana que queremos que ella misma sea su DataContext.

En el XAML, usamos esta forma para enlazar algunas de las propiedades de la ventana, incluyendo el titulo, el ancho y el alto. Dado que la ventana tiene un DataContext, el cual se transmite a sus controles hijos, no tenemos que definir una fuente de datos en cada uno de los enlaces - sólo usamos las variables como si estas fueran variables globales.

Prueba a ejecutar el ejemplo y redimensiona la ventana - veras que los cambios de tamaño son inmediatamente reflejados en los cuadros de texto. También puedes escribir un título diferente en el primer cuadro de texto, puede que te sorprenda ver que ese cambio no es reflejado inmediatamente. Para que esto ocurra deberás cambiar el foco a otro control para que el cambio sea aplicado. ¿Porque? bueno este es el tema del siguiente capítulo.

Resumen

Usar la propiedad DataContext es como establecer la base de todos los bindings hacia abajo en la jerarquía de controles. Esto te ahorra la molestia de definir manualmente una fuente para cada binding, y una vez que comiences a utilizar data bindings, definitivamente apreciarás el tiempo y tipeo que ahorras.

Sin embargo, esto no significa que debes utilizar el mismo DataContext para todos los controles dentro de una ventana. Como cada control tiene su propiedad DataContext, puedes fácilmente romper la cadena de herencia y sobreescribir el DataContext con un nuevo valor. Esto te permite hacer algo como tener un DataContext global en la ventana y otro más local y específico, en por ejemplo, un panel conteniendo un formulario separado o algo a lo largo de esas líneas.


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!