Procedura dettagliata: costruzione di un layout dinamico basato sui dati
Aggiornamento: novembre 2007
In WPF (Windows Presentation Foundation) sono disponibili controlli che supportano layout dinamici basati su dati. L'utilizzo di questi controlli con Progettazione Windows Presentation Foundation (WPF) per Visual Studio°semplifica°la creazione di questi tipi di layout. Nelle applicazioni è possibile utilizzare i controlli seguenti:
Il controllo ListView fornisce l'infrastruttura per la visualizzazione di un set di elementi dei dati in layout diversi. In genere GridView viene utilizzato insieme al controllo ListView per la visualizzazione di dati in colonne. Per ulteriori informazioni, vedere Panoramica sul controllo ListView e Cenni preliminari su GridView.
In questa procedura dettagliata vengono eseguite le attività seguenti:
Preparazione di un'origine dati.
Creazione di un'applicazione WPF.
Configurazione del controllo Panel Grid predefinito.
Aggiunta e configurazione di un controllo ListView.
Aggiunta e configurazione di un controllo GridView in XAML.
Aggiunta e configurazione di un controllo Button.
Aggiunta di codice per l'associazione dati.
Test dell'applicazione.
Nella figura seguente è illustrata l'applicazione finale.
![]() |
---|
È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida, a seconda delle impostazioni attive o dell'edizione del programma. Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
Prerequisiti
Per completare questa procedura dettagliata, è necessario disporre dei seguenti componenti:
- Visual Studio 2008
Preparazione dell'origine dati
Per questa procedura dettagliata, è necessario disporre di un'origine dati di esempio da utilizzare per l'associazione. Verrà creata un'origine dati su file CSV semplice.
Per preparare l'origine dati
Creare una nuova cartella e denominarla Dati.
Nella cartella Data creare un nuovo file di testo e denominarlo employees.csv.
Nota:
È possibile utilizzare qualsiasi editor di testo, ad esempio il Blocco note, per creare il file.
Aggiungere quanto segue al file di testo:
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 Representative
Salvare e chiudere il file.
Suggerimento:
È possibile aprire il file in Excel e confermare che i valori separati da virgola dovranno essere visualizzati in colonne separate.
Nella cartella Data creare un nuovo file di testo e denominarlo schema.ini. Nel file di schema viene descritto il formato dei file di testo contenuti nella cartella di dati.
Aggiungere quanto segue al file di testo:
[employees.csv] Format=CSVDelimited ColNameHeader=True
Suggerimento:
In questa procedura dettagliata il file CSV include intestazioni di colonna. Per eseguire l'associazione a un file CSV che non include intestazioni di colonna, impostare ColNameHeader=True su ColNameHeader=False.
Salvare e chiudere il file.
Creazione del progetto
La procedura successiva consiste nella creazione del progetto°Visual Studio per l'applicazione.
Per creare il progetto
In Visual Basic o Visual C# creare un nuovo progetto di applicazione WPF denominato DataDrivenLayout. Per ulteriori informazioni, vedere Procedura: creare un nuovo progetto di applicazione WPF.
Window1.xaml verrà aperto in WPF Designer.
Scegliere Salva tutto dal menu File.
Configurazione del controllo Panel predefinito della griglia
Per impostazione predefinita, la nuova applicazione WPF contiene un oggetto Window con un pannello Grid. In questa procedura verranno aggiunte due righe alla griglia. Impostare l'altezza di una riga su Auto, in modo che le dimensioni vengano adattate al contenuto. Impostare l'altezza della riga su *, in modo che venga utilizzata l'altezza disponibile rimanente.
Per configurare il controllo pannello griglia predefinito
In visualizzazione Progettazione selezionare Grid. Per ulteriori informazioni, vedere Procedura: selezionare e spostare elementi sull'area di progettazione.
Nella finestra Proprietà individuare la proprietà RowDefinitions e fare clic sul pulsante con i puntini di sospensione nella colonna del valore della proprietà.
Verrà visualizzato l'Editor dell'insieme.
Fare due volte clic su Aggiungi per aggiungere due righe.
Impostare la proprietà Height della prima riga su *.
Impostare la proprietà Height della seconda riga su Auto.
Scegliere OK per chiudere l'Editor dell'insieme e tornare a WPF Designer.
Nella griglia sono ora presenti due righe, ma ne viene visualizzata solo una. La riga la cui proprietà Height è impostata su Auto viene temporaneamente nascosta perché è priva di contenuto. Per questa procedura, tale impostazione risulta appropriata. Per evitare tale comportamento in futuro, è possibile utilizzare il ridimensionamento proporzionale durante la progettazione e impostare il valore su Auto al termine.
Scegliere Salva tutto dal menu File.
Aggiunta e configurazione di un oggetto ListView
In questa procedura viene aggiunto un oggetto ListView. Assegnare a ListView un nome in modo che sia possibile farvi riferimento dal file code-behind. Configurare le proprietà di layout.
Per aggiungere e configurare un oggetto ListView
In visualizzazione Progettazione selezionare Grid.
Dal gruppo Controlli della Casella degli strumenti trascinare un controllo ListView in Grid.
Nella finestra Proprietà impostare le seguenti proprietà per ListView:
Proprietà
Valore
Name
lvEmployees
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
0
Grid.RowSpan
1
Width
Auto
Height
Auto
HorizontalAlignment
Stretch
VerticalAlignment
Stretch
Margin
0
Scegliere Salva tutto dal menu File.
Aggiunta e configurazione di un oggetto GridView
In questa procedura viene aggiunto un oggetto GridView con tre colonne per visualizzare i dati del file di testo. Assegnare nomi alle colonne perché è necessario farvi riferimento dal file code-behind per associare i dati alle colonne singolarmente. Per ulteriori informazioni, vedere Procedura: visualizzare il contenuto di ListView utilizzando un oggetto GridView.
Per aggiungere e configurare un oggetto GridView
Nell'editor XAML individuare l'elemento ListView, che sarà analogo al seguente:
<ListView <ATTRIBUTES> />
Suggerimento:
Per evidenziare facilmente gli elementi in visualizzazione XAML, fare clic sul controllo in visualizzazione Progettazione o utilizzare la finestra Struttura documento.
Sostituire l'elemento ListView con quanto riportato di seguito:
<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>
Scegliere Salva tutto dal menu File.
Aggiunta e configurazione di un oggetto Button
In questa procedura viene un oggetto Button e viene specificato il relativo evento Click.
Per aggiungere e configurare un oggetto Button
In visualizzazione Progettazione selezionare Grid.
Suggerimento:
Poiché ListView copre Grid, può risultare difficile selezionare Grid. È possibile utilizzare il tasto TAB o la finestra Struttura documento per selezionare Grid.
Dal gruppo Controlli della Casella degli strumenti trascinare un controllo Button in Grid.
Nella finestra Proprietà impostare le seguenti proprietà per Button:
Proprietà
Valore
Name
btnGetData
Contenuto
Get Data
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
1
Grid.RowSpan
1
Width
75
Height
23
HorizontalAlignment
Right
VerticalAlignment
Bottom
Margin
5
Nell'editor XAML individuare l'elemento Button, che sarà analogo al seguente:
<Button <ATTRIBUTES>>Button</Button>
Suggerimento:
Per evidenziare facilmente gli elementi in visualizzazione XAML, fare clic sul controllo in visualizzazione Progettazione o utilizzare la finestra Struttura documento.
Modificare il codice XAML per aggiungere un attributo dell'evento Click. Il risultato dovrebbe essere analogo al seguente:
<Button Click="btnGetData_Click"<ATTRIBUTES>>Button</Button>
Scegliere Salva tutto dal menu File.
Aggiunta di codice per l'associazione dati
In questa procedura viene aggiunto il codice per l'evento Click di Button: in fase di progettazione fare clic sul pulsante per ottenere i dati e associarlo a ListView e a GridView.
Per aggiungere il codice per l'associazione dati
Aprire il file code-behind, ovvero Window1.xaml.cs o Window1.xaml.vb, a seconda del linguaggio selezionato per il progetto.
Nella parte superiore dell'editor di codice aggiungere il codice seguente. Per eseguire l'associazione ai dati è necessario accedere agli spazi dei nomi System.Data e 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 'ListView
using System; //Exception using System.Data; //DataTable using System.Data.OleDb; //OleDbDataAdapter using System.Windows; //RoutedEventArgs using System.Windows.Data; //Binding using System.Windows.Controls; //ListView
Aggiungere il codice seguente nella classe Window1. Utilizzare DataTable per archiviare i dati.
Dim dtEmployees As DataTable
DataTable dtEmployees;
Aggiungere il codice seguente nella classe Window1. Quando l'utente fa clic sul pulsante, i dati vengono ottenuti e associati a ListView.
Private Sub btnGetData_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) dtEmployees = GetData() BindData() End Sub
private void btnGetData_Click(object sender, RoutedEventArgs e) { dtEmployees = GetData(); BindData(); }
Aggiungere il codice seguente nella classe Window1 e specificare il percorso della cartella Data. Per ottenere i dati, utilizzare 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 Function
DataTable 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; }
Aggiungere il codice seguente nella classe Window1. Per associare i dati a ListView, impostare DataContext su DataTable. Le colonne di dati vengono visualizzate nelle colonne di 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 Sub
void 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"); }
Scegliere Salva tutto dal menu File.
Impostazione della finestra per il ridimensionamento dinamico
La proprietà SizeToContent specifica come vengono modificate le dimensioni di un oggetto Window in base alle dimensioni del relativo contenuto. Per impostazione predefinita, questa proprietà è impostata su Manual, quindi l'utente può ridimensionare manualmente la finestra per adattare il contenuto. In questa procedura la proprietà viene impostata su WidthAndHeight, quindi la finestra viene ridimensionata dinamicamente quando il contenuto cambia.
Per impostare la finestra per il ridimensionamento dinamico
Aprire il file Window1.xaml nella finestra di progettazione.
In visualizzazione Progettazione selezionare Window.
Nella finestra Proprietà impostare le seguenti proprietà per Window:
Proprietà
Valore
SizeToContent
WidthAndHeight
Width
Auto
Height
Auto
Scegliere Salva tutto dal menu File.
Test dell'applicazione
Per eseguire il test dell'applicazione
Scegliere Avvia debug dal menu Debug.
L'applicazione viene avviata e viene visualizzata la finestra. Poiché la proprietà SizeToContent è stata impostata su WidthAndHeight, le dimensioni della finestra sono sufficienti solo per la visualizzazione delle intestazioni di GridView e di Button.
Fare clic su Get Data.
L'applicazione ottiene i dati e li associa a GridView. GridView, ListView e Window vengono ridimensionati dinamicamente per adattare il nuovo contenuto.
Chiudere la finestra.
Riepilogo
Di seguito è riportato il file Window1.xaml completato:
<Window x:Class="Window1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" 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>
Passaggi successivi
In questa procedura dettagliata è stato utilizzato un oggetto GridView con tre colonne per la visualizzazione dei dati. I dati sono stati associati direttamente a ogni colonna singolarmente. È anche possibile utilizzare modelli di dati per disporre e assegnare uno stile ai dati in ListView o GridView. Per ulteriori informazioni, vedere Cenni preliminari sui modelli di dati.
Provare a utilizzare i modelli di dati di questa procedura dettagliata. Ad esempio, è possibile creare un modello analogo al seguente:
<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>
Utilizzare quindi il modello di dati in GridView con il codice, come riportato di seguito:
<ListView.View>
<GridView>
<GridViewColumn CellTemplate="{StaticResource templateEmployees}" />
</GridView>
</ListView.View>
Rimuovere dal code-behind il codice seguente o impostarlo come commento:
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");
Vedere anche
Attività
Procedura: costruire un layout dinamico basato su dati
Concetti
Cenni preliminari su Progettazione WPF