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.
Windows Presentation Foundation (WPF) proporciona controles que admiten diseños dinámicos controlados por datos. El uso de estos controles con WPF Designer for Visual Studio facilita la creación de estos tipos de diseños. Puede utilizar los controles siguientes en las aplicaciones:
El control ListView proporciona la infraestructura necesaria para mostrar un conjunto de elementos de datos en distintos diseños. GridView se suele utilizar junto con el control ListView para mostrar datos en columnas. Para obtener más información, vea Información general sobre ListView y Información general sobre GridView.
En este tutorial realizará las siguientes tareas:
Preparar un origen de datos.
Crear una aplicación de WPF.
Configurar el control de panel Grid predeterminado.
Agregar y configurar un control ListView.
Agregar y configurar un control GridView en XAML.
Agregar y configurar un control Button.
Agregar código de enlace de datos.
Probar la aplicación.
En la ilustración siguiente se muestra la apariencia que tendrá la aplicación.
.png)
Nota
Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Trabajar con valores de configuración.
Requisitos previos
Necesita los componentes siguientes para completar este tutorial:
- Visual Studio 2010
Preparar el origen de datos
Para este tutorial, necesitará un origen de datos de ejemplo con el que realizar el enlace. Creará un origen de datos en un archivo CSV simple.
Para preparar el origen de datos
Cree una nueva carpeta con el nombre Data.
En la carpeta Data, cree un nuevo archivo de texto con el nombre employees.csv.
Nota
Para crear el archivo puede utilizar cualquier editor de texto como, por ejemplo, el Bloc de notas.
Agregue lo siguiente al archivo de texto:
LastName,FirstName,Title Davis,Sara,Sales Representative Funk,Don,Vice President, Sales Levin,Danny,Sales Representative Penor,Lori,Sales Representative Buschmann,Monika,Sales Manager Suominen,Ari,Sales Representative King,Russell,Sales Representative Cameron,Maria,Inside Sales Coordinator Doyle,Patricia,Sales RepresentativeGuarde y cierre el archivo.
SugerenciaPuede abrir el archivo en Excel y confirmar que los datos separados por comas aparecen en columnas independientes.
En la carpeta Data, cree un nuevo archivo de texto con el nombre schema.ini. El archivo de esquema describe el formato de los archivos de texto de la carpeta de datos.
Agregue lo siguiente al archivo de texto:
[employees.csv] Format=CSVDelimited ColNameHeader=True
SugerenciaEn este tutorial, el archivo CSV tiene encabezados de columna. Para enlazar a un archivo CSV que no tenga encabezados de columna, cambie ColNameHeader=True por ColNameHeader=False.
Guarde y cierre el archivo.
Creación del proyecto
El procedimiento siguiente consiste en crear el proyecto de Visual Studio para la aplicación.
Para crear el proyecto
Cree un nuevo proyecto de aplicación de WPF en Visual Basic o en Visual C# denominado DataDrivenLayout. Para obtener más información, vea Cómo: Crear un nuevo proyecto de aplicación de WPF.
MainWindow.xaml se abrirá en WPF Designer.
En el menú Archivo, haga clic en Guardar todo.
Configurar el control de panel de cuadrícula predeterminado
De forma predeterminada, la nueva aplicación de WPF contiene un Window con un panel Grid. En este procedimiento se agregan dos filas a la cuadrícula. El alto de una fila se establece en Auto, para que su tamaño se ajuste al contenido. El alto de la otra fila se establece en *, para que use el alto disponible restante.
Para configurar el control de panel de cuadrícula predeterminado
En la Vista de diseño, seleccione Grid. Para obtener más información, vea Cómo: Seleccionar y mover elementos en la superficie de diseño.
En la ventana Propiedades, busque la propiedad RowDefinitions y haga clic en el botón de puntos suspensivos en la columna de valores de propiedad.
Aparecerá el Editor de colecciones.
Haga clic en Agregar dos veces para agregar dos filas.
Establezca la propiedad Height de la primera fila en *.
Establezca la propiedad Height de la segunda fila en Auto.
Haga clic en Aceptar para cerrar el Editor de colecciones y volver a WPF Designer.
Ahora hay dos filas en la cuadrícula, pero sólo aparece una. La fila cuya propiedad Height está establecida en Auto se oculta temporalmente porque no tiene contenido. Para el propósito de este tutorial, esto está bien. Pero para evitarlo en el futuro, puede utilizar el ajuste del tamaño mediante asterisco mientras trabaja, y cambiar a Auto cuando haya terminado.
En el menú Archivo, haga clic en Guardar todo.
Agregar y configurar un control ListView
En este procedimiento se agrega un control ListView. Se da un nombre a ListView para que pueda hacer referencia a él desde el archivo de código subyacente. Se configuran sus propiedades de diseño.
Para agregar y configurar un control ListView
En la Vista de diseño, seleccione Grid.
En el Cuadro de herramientas, en el grupo Controles, arrastre un control ListView hasta Grid.
En la ventana Propiedades, establezca las siguientes propiedades de ListView:
Propiedad
Valor
Name
lvEmployees
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
0
Grid.RowSpan
1
Width
Automático
Height
Auto
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
0
En el menú Archivo, haga clic en Guardar todo.
Agregar y configurar un control GridView
En este procedimiento se agrega un control GridView con tres columnas para mostrar los datos del archivo de texto. Se asignan nombres de las columnas porque se hará referencia a ellas desde el código subyacente para enlazar los datos a las columnas individualmente. Para obtener más información, vea Cómo: Mostrar el contenido de ListView mediante un control GridView.
Para agregar y configurar un control GridView
En el editor XAML, busque el elemento ListView. Tiene la apariencia siguiente:
<ListView <ATTRIBUTES> />
SugerenciaPara resaltar con facilidad los elementos en la vista XAML, haga clic en el control en la Vista de diseño o utilice la ventana Esquema del documento.
Reemplace el elemento ListView con lo siguiente:
<ListView x:Name="lvEmployees"> <ListView.View> <GridView AllowsColumnReorder="True"> <GridViewColumn x:Name="c1Employees" Header="Last Name"></GridViewColumn> <GridViewColumn x:Name="c2Employees" Header="First Name"></GridViewColumn> <GridViewColumn x:Name="c3Employees" Header="Title"></GridViewColumn> </GridView> </ListView.View> </ListView>En el menú Archivo, haga clic en Guardar todo.
Agregar y configurar un control de botón
En este procedimiento, se agrega un control Button y se especifica su evento Click.
Para agregar y configurar un control de botón
En la Vista de diseño, seleccione Grid.
SugerenciaDado que ListView cubre Grid, podría resultar difícil seleccionar Grid. Puede utilizar la tecla TAB o la ventana Esquema del documento para seleccionar Grid.
En el Cuadro de herramientas, en el grupo Controles, arrastre un control Button hasta Grid.
En la ventana Propiedades, establezca las siguientes propiedades de Button:
Propiedad
Valor
Name
btnGetData
Content
Get Data
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
1
Grid.RowSpan
1
Width
75
Height
23
HorizontalAlignment
Right
VerticalAlignment
Bottom
Margin
5
En el editor XAML, busque el elemento Button. Tiene la apariencia siguiente:
<Button <ATTRIBUTES>>Button</Button>
SugerenciaPara resaltar con facilidad los elementos en la vista XAML, haga clic en el control en la Vista de diseño o utilice la ventana Esquema del documento.
Edite el XAML para agregar un atributo del evento Click. Debe tener este aspecto:
<Button Click="btnGetData_Click" <ATTRIBUTES>>Button</Button>En el menú Archivo, haga clic en Guardar todo.
Agregar el código de enlace a datos
En este procedimiento se agrega el código para el evento Click de Button. En tiempo de ejecución, se hace clic en el botón para obtener los datos y enlazarlos a los controles ListView y GridView.
Para agregar el código de enlace de datos
Abra el archivo de código subyacente; MainWindow.xaml.cs o MainWindow.xaml.vb, según el lenguaje que seleccionó para su proyecto.
En la parte superior del editor de código, agregue el código siguiente. Para enlazar a los datos, es preciso tener acceso a los espacios de nombres System.Data y System.Data.OleDb.
Imports System.Data 'DataTable Imports System.Data.OleDb 'OleDbDataAdapter Imports System.Windows 'RoutedEventArgs Imports System.Windows.Data 'Binding Imports System.Windows.Controls 'ListViewusing System; //Exception using System.Data; //DataTable using System.Data.OleDb; //OleDbDataAdapter using System.Windows; //RoutedEventArgs using System.Windows.Data; //Binding using System.Windows.Controls; //ListViewAgregue el código siguiente en la clase MainWindow. Se utiliza un DataTable para almacenar los datos.
Dim dtEmployees As DataTableDataTable dtEmployees;Agregue el código siguiente en la clase MainWindow. Cuando el usuario haga clic en el botón, se obtendrán los datos y, a continuación, se enlazarán a ListView.
Private Sub btnGetData_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) dtEmployees = GetData() BindData() End Subprivate void btnGetData_Click(object sender, RoutedEventArgs e) { dtEmployees = GetData(); BindData(); }En la clase MainWindow, agregue el código siguiente y especifique la ruta de acceso a la carpeta Data. Para obtener los datos, se utiliza un OleDbDataAdapter.
Function GetData() As DataTable Dim sConnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<Your Path>\Data\;Extended Properties=""text;HDR=yes;FMT=delimited"";" Dim sSQL As String = "select * from employees.csv" Dim dt As DataTable = New DataTable() Dim da As OleDbDataAdapter = New OleDbDataAdapter(sSQL, sConnection) Try da.Fill(dt) Catch ex As Exception MessageBox.Show(ex.ToString()) End Try Return dt End FunctionDataTable GetData() { string sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<Your Path>\\Data\\;Extended Properties=\"text;HDR=yes;FMT=delimited\";"; string sSQL = "select * from employees.csv"; DataTable dt = new DataTable(); OleDbDataAdapter da = new OleDbDataAdapter(sSQL, sConnection); try { da.Fill(dt); } catch (Exception e) { MessageBox.Show(e.ToString()); } return dt; }Agregue el código siguiente en la clase MainWindow. Para enlazar los datos a ListView, se establece su propiedad DataContext en DataTable. Las columnas de datos se muestran en las columnas del GridView.
Sub BindData() lvEmployees.DataContext = dtEmployees lvEmployees.SetBinding(ListView.ItemsSourceProperty, New Binding()) c1Employees.DisplayMemberBinding = New Binding("LastName") c2Employees.DisplayMemberBinding = New Binding("FirstName") c3Employees.DisplayMemberBinding = New Binding("Title") End Subvoid BindData() { lvEmployees.DataContext = dtEmployees; lvEmployees.SetBinding(ListView.ItemsSourceProperty, new Binding()); c1Employees.DisplayMemberBinding = new Binding("LastName"); c2Employees.DisplayMemberBinding = new Binding("FirstName"); c3Employees.DisplayMemberBinding = new Binding("Title"); }En el menú Archivo, haga clic en Guardar todo.
Establecer la ventana para que ajuste su tamaño dinámicamente
La propiedad SizeToContent especifica cómo cambia el tamaño de Window cuando cambia el tamaño de su contenido. De manera predeterminada, esta propiedad está establecida en Manual, lo que significa que el usuario puede cambiar manualmente el tamaño de la ventana para ajustarla al contenido. En este procedimiento se establece esta propiedad en WidthAndHeight, de manera que el tamaño de la ventana se ajuste dinámicamente cuando cambie su contenido.
Para establecer la ventana de modo que ajuste su tamaño dinámicamente
Abra MainWindow.xaml en el diseñador.
En la vista Diseño, seleccione Window.
En la ventana Propiedades, establezca las siguientes propiedades de Window:
Propiedad
Valor
SizeToContent
WidthAndHeight
Width
Auto
Height
Auto
En el menú Archivo, haga clic en Guardar todo.
Probar la aplicación
Para probar la aplicación
En el menú Depurar, haga clic en Iniciar depuración.
La aplicación se inicia y aparece la ventana. Dado que la propiedad SizeToContent se establece en WidthAndHeight, la ventana tiene el tamaño justo para los encabezados de GridView y el control Button.
Haga clic en Get Data.
La aplicación obtiene los datos y los enlaza a GridView. Los controles GridView y ListView, y la ventana Window cambian de tamaño dinámicamente para ajustarse al nuevo contenido.
Cierre la ventana.
Resultado final
A continuación se muestra el archivo MainWindow.xaml completo:
<Window x:Class="MainWindow"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="Auto" Width="Auto" SizeToContent="WidthAndHeight">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ListView x:Name="lvEmployees">
<ListView.View>
<GridView AllowsColumnReorder="True">
<GridViewColumn x:Name="c1Employees" Header="Last Name"></GridViewColumn>
<GridViewColumn x:Name="c2Employees" Header="First Name"></GridViewColumn>
<GridViewColumn x:Name="c3Employees" Header="Title"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Click="btnGetData_Click" Name="btnGetData" Margin="5" Height="23" Width="75" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Column="0" Grid.ColumnSpan="1" Grid.Row="1" Grid.RowSpan="1">Get Data</Button>
</Grid>
</Window>
Pasos siguientes
En este tutorial se utilizó un control GridView con tres columnas para mostrar datos. Se enlazaron directamente los datos a cada columna de manera individual. También puede utilizar plantillas de datos para organizar los datos de los controles ListView o GridView y aplicarles estilos. Para obtener más información, vea Información general sobre plantillas de datos.
Puede experimentar con el uso de plantillas de datos en este tutorial. Por ejemplo, puede crear una plantilla como la siguiente:
<Window.Resources>
<DataTemplate x:Key="templateEmployees">
<Border BorderBrush="Silver" BorderThickness="1" Padding="5" Margin="5">
<DockPanel>
<StackPanel DockPanel.Dock="Left">
<TextBlock Text="{Binding Path=LastName}" />
<TextBlock Text="{Binding Path=FirstName}" />
</StackPanel>
<TextBlock Text="{Binding Path=Title}" DockPanel.Dock="Right" />
</DockPanel>
</Border>
</DataTemplate>
</Window.Resources>
A continuación, utilice la plantilla de datos en GridView con un código como el siguiente:
<ListView.View>
<GridView>
<GridViewColumn CellTemplate="{StaticResource templateEmployees}" />
</GridView>
</ListView.View>
Quite o marque como comentario lo siguiente del código subyacente:
c1Employees.DisplayMemberBinding = New Binding("LastName")
c2Employees.DisplayMemberBinding = New Binding("FirstName")
c3Employees.DisplayMemberBinding = New Binding("Title")
c1Employees.DisplayMemberBinding = new Binding("LastName");
c2Employees.DisplayMemberBinding = new Binding("FirstName");
c3Employees.DisplayMemberBinding = new Binding("Title");
Vea también
Tareas
Cómo: Crear un diseño dinámico controlado por datos
Conceptos
Información general sobre WPF y Silverlight Designer