Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo crear una vinculación de datos XAML. En el ejemplo se usa un objeto de datos que representa a un empleado de una empresa. Este objeto de datos está enlazado a una ventana XAML que usa TextBlock
controles para enumerar los detalles del empleado. Creará una interfaz de usuario similar a la siguiente imagen:
Para obtener más información sobre el enlace de datos, consulte Introducción al enlace de datos en WPF.
Creación de un objeto de datos
En este ejemplo, se usa un empleado como el objeto de datos al que está enlazada la interfaz de usuario.
Agregue una nueva clase al proyecto y asígnele
Employee
el nombre .Reemplaza todo el código por el fragmento siguiente:
using System; using System.ComponentModel; namespace ArticleSample { public class Employee : INotifyPropertyChanged { private decimal _salary; public event PropertyChangedEventHandler? PropertyChanged; public required string FirstName { get; set; } public required string LastName { get; set; } public required string Title { get; set; } public required DateTime HireDate { get; set; } public required decimal Salary { get => _salary; set { _salary = value; // Support TwoWay binding PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Salary))); } } } }
Imports System.ComponentModel Public Class Employee Implements INotifyPropertyChanged Private _salary As Decimal Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Property FirstName As String Public Property LastName As String Public Property Title As String Public Property HireDate As DateTime Public Property Salary As Decimal Get Return _salary End Get Set(value As Decimal) _salary = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(NameOf(Salary))) End Set End Property End Class
El objeto de datos employee es una clase sencilla que describe a un empleado:
- Nombre y apellido del empleado.
- Fecha en la que se contrató al empleado.
- Título de la empresa del empleado.
- Cuánto ingresos gana el empleado.
Enlazar a un objeto de datos
En el código XAML siguiente se muestra el uso de la Employee
clase como un objeto de datos. La propiedad del DataContext
elemento raíz está enlazada a un recurso estático declarado en xaml. Los controles individuales se enlazan a las propiedades de .Employee
Agregue una nueva ventana al proyecto y asígnele el nombre
EmployeeView
Reemplace xaml por el fragmento de código siguiente:
Importante
El fragmento de código siguiente se toma de un proyecto de C#. Si usa Visual Basic,
x:Class
debe declararse sin elArticleSample
espacio de nombres. Puedes ver el aspecto de la versión de Visual Basic en EmployeeView.xaml.<Window x:Class="ArticleSample.EmployeeView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ArticleSample" Title="" Height="250" Width="300"> <Window.Resources> <local:Employee x:Key="EmployeeExample" FirstName="Niki" LastName="Demetriou" HireDate="2022-02-16" Salary="5012.00" Title="Content Artist" /> </Window.Resources> <StackPanel DataContext="{StaticResource EmployeeExample}"> <Label FontSize="32">Employee</Label> <Border BorderBrush="Gray" BorderThickness="2" /> <Grid Grid.Row="1" Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Text="First Name:" Grid.Row="0" Margin="0,0,10,0" /> <TextBlock Text="Last Name:" Grid.Row="1" /> <TextBlock Text="Title:" Grid.Row="2" /> <TextBlock Text="Hire Date:" Grid.Row="3" /> <TextBlock Text="Salary" Grid.Row="4" /> <TextBlock Text="{Binding FirstName}" Grid.Row="0" Grid.Column="1" /> <TextBlock Text="{Binding LastName}" Grid.Row="1" Grid.Column="1" /> <TextBlock Text="{Binding Title}" Grid.Row="2" Grid.Column="1" /> <TextBlock Text="{Binding HireDate, StringFormat=d}" Grid.Row="3" Grid.Column="1" /> <TextBlock Text="{Binding Salary, StringFormat=C0}" Grid.Row="4" Grid.Column="1" /> </Grid> <Border BorderBrush="Gray" BorderThickness="2" /> <StackPanel Margin="5,10" Orientation="Horizontal"> <TextBlock Text="Change Salary:" Margin="0,0,10,0" /> <TextBox Text="{Binding Salary, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=C0}" Width="100" /> </StackPanel> </StackPanel> </Window>
El espacio de nombres del código no coincidirá con el espacio de nombres del proyecto, a menos que haya creado un proyecto denominado ArticleSample. Puede copiar y pegar el Window.Resources
y el elemento raíz (StackPanel
) en su MainWindow si creó un nuevo proyecto.
Para comprender mejor cómo el XAML anterior está utilizando la vinculación de datos, tenga en cuenta los siguientes puntos:
Un recurso XAML se usa para crear una instancia de la
Employee
clase .Normalmente, el objeto de datos se pasa a o se asocia a la ventana. En este ejemplo se codifica de forma dura al empleado con fines de demostración.
<Window.Resources> <local:Employee x:Key="EmployeeExample" FirstName="Niki" LastName="Demetriou" HireDate="2022-02-16" Salary="5012.00" Title="Content Artist" /> </Window.Resources>
El elemento raíz (
StackPanel
) tiene su contexto de datos configurado a la instancia con código fijo deEmployee
.Los elementos secundarios heredan su
DataContext
del elemento primario, a menos que se establezcan explícitamente.<StackPanel DataContext="{StaticResource EmployeeExample}">
Las propiedades de la
Employee
instancia están enlazadas a losTextBlock
controles.Binding
no especifica unBindingSource
, por lo queDataContext
se usa como origen.<TextBlock Text="{Binding FirstName}" Grid.Row="0" Grid.Column="1" /> <TextBlock Text="{Binding LastName}" Grid.Row="1" Grid.Column="1" /> <TextBlock Text="{Binding Title}" Grid.Row="2" Grid.Column="1" /> <TextBlock Text="{Binding HireDate, StringFormat=d}" Grid.Row="3" Grid.Column="1" /> <TextBlock Text="{Binding Salary, StringFormat=C0}" Grid.Row="4" Grid.Column="1" />
Un
TextBox
control está enlazado en elTwoWay
modo, permitiendo que elTextBox
cambie la propiedadEmployee.Salary
.<TextBox Text="{Binding Salary, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat=C0}" Width="100" />
Contenido relacionado
.NET Desktop feedback