Procedura dettagliata: costruzione di un layout dinamico basato sui dati
In WPF (Windows Presentation Foundation) sono disponibili controlli che supportano layout dinamici basati su dati. L'utilizzo di questi controlli con WPF Designer 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 ListView Overview e GridView Overview.
Questa procedura dettagliata prevede l'esecuzione delle 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.
Nota
È 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 Gestione delle impostazioni.
Prerequisiti
Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:
- Visual Studio 2010
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.
MainWindow.xaml viene 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
Nome
lvEmployees
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
0
Grid.RowSpan
1
Larghezza
Auto
Altezza
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 How to: Display ListView Contents by Using a 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
Nome
btnGetData
Contenuto
Get Data
Grid.Column
0
Grid.ColumnSpan
1
Grid.Row
1
Grid.RowSpan
1
Larghezza
75
Altezza
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 MainWindow.xaml.cs o MainWindow.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 MainWindow. Utilizzare DataTable per archiviare i dati.
Dim dtEmployees As DataTable
DataTable dtEmployees;
Aggiungere il codice seguente nella classe MainWindow. 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 MainWindow 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 MainWindow. 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 MainWindow.xaml nella finestra di progettazione.
In visualizzazione Progettazione selezionare Window.
Nella finestra Proprietà impostare le seguenti proprietà per Window:
Proprietà
Valore
SizeToContent
WidthAndHeight
Larghezza
Auto
Altezza
Auto
Scegliere Salva tutto dal menu File.
Verifica 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 MainWindow.xaml completato:
<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>
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 Data Templating Overview.
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 WPF e Silverlight Designer