Procedura dettagliata: associazione di controlli WPF a un servizio dati WCF
Data di pubblicazione: aprile 2016
In questa procedura dettagliata, verrà creata un'applicazione WPF contenente i controlli associati a dati. I controlli vengono associati a record cliente incapsulati in un'istanza di WCF Data Service. Verranno inoltre aggiunti i pulsanti che i clienti possono usare per visualizzare e aggiornare i record.
In questa procedura dettagliata vengono illustrate le attività seguenti:
Creazione di un modello Entity Data Model generato dai dati nel database di esempio AdventureWorksLT.
Creazione di un'istanza di WCF Data Service che espone i dati del modello Entity Data Model in un'applicazione WPF.
Creazione di un set di controlli associati a dati mediante il trascinamento di elementi dalla finestra Origini dati in WPF Designer.
Creazione di pulsanti per spostarsi avanti e indietro tra i record cliente.
Creazione di un pulsante che consente di salvare le modifiche apportate ai dati dei controlli nell'istanza di WCF Data Service e nell'origine dati sottostante.
Nota
Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.
Prerequisiti
Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:
Visual Studio
Accesso a un'istanza in esecuzione di SQL Server o SQL Server Express con il database di esempio AdventureWorksLT associato. È possibile scaricare il database AdventureWorksLT dal sito Web CodePlex.
Per completare la procedura dettagliata è inoltre consigliabile conoscere già i concetti seguenti:
WCF Data Services. Per altre informazioni, vedere Cenni preliminari.
Modelli di dati in WCF Data Services.
Modelli di Entity Data Model e ADO.NET Entity Framework. Per altre informazioni, vedere Panoramica su Entity Framework.
Uso di WPF Designer. Per altre informazioni, vedere Cenni preliminari su WPF e Silverlight Designer.
Data binding WPF. Per altre informazioni, vedere Cenni preliminari sull'associazione dati.
Creazione del progetto di servizio
Avviare la procedura dettagliata creando un progetto per un'istanza di WCF Data Service.
Per creare il progetto di servizio
Avviare Visual Studio.
Scegliere Nuovo dal menu File, quindi fare clic su Progetto.
Espandere Visual C# o Visual Basic, quindi selezionare Web.
Selezionare il modello di progetto Applicazione Web ASP.NET.
Nella casella Nome digitare
AdventureWorksService
e fare clic su OK.Visual Studio crea il progetto
AdventureWorksService
.In Esplora soluzioni fare clic con il pulsante destro del mouse su Default.aspx e scegliere Elimina. Questo file non è necessario per la procedura dettagliata.
Creazione di un modello Entity Data Model per il servizio
Per esporre i dati in un'applicazione usando un'istanza di WCF Data Service, è necessario definire un modello di dati per il servizio. WCF Data Service supporta due tipi di modelli di dati: i modelli Entity Data Model e i modelli di dati personalizzati definiti mediante gli oggetti CLR (Common Language Runtime) che implementano l'interfaccia IQueryable<T>. In questa procedura dettagliata, viene creato un modello Entity Data Model per il modello di dati.
Per creare un modello Entity Data Model
Nel menu Progetto fare clic su Aggiungi nuovo elemento.
Nell'elenco Modelli installati fare clic su Dati, quindi selezionare l'elemento di progetto ADO.NET Entity Data Model.
Modificare il nome in
AdventureWorksModel.edmx
, e fare clic su Aggiungi.Verrà aperta la Procedura guidata Entity Data Model.
Nella pagina Scegli contenuto del modello fare clic su Genera da database, quindi su Avanti.
Nella pagina Seleziona connessione dati selezionare una delle opzioni seguenti:
Selezionare la connessione dati al database di esempio AdventureWorksLT nell'elenco a discesa, se presente.
-oppure-
Fare clic su Nuova connessione e creare una connessione al database AdventureWorksLT.
Nella pagina Seleziona connessione dati verificare che l'opzione Salva impostazioni di connessione entità in App.Config come sia selezionata, quindi fare clic su Avanti.
Nella pagina Seleziona oggetti di database espandere Tabelle, quindi selezionare la tabella SalesOrderHeader.
Scegliere Fine.
Creazione del servizio
Creare un'istanza di WCF Data Service per esporre i dati del modello Entity Data Model in un'applicazione WPF.
Per creare il servizio
Scegliere Aggiungi nuovo elementodal menu Progetto.
Nell'elenco Modelli installati fare clic su Web, quindi selezionare l'elemento di progetto WCF Data Services.
Nella casella Nome digitare
AdventureWorksService.svc
e fare clic su Aggiungi.Visual Studio aggiunge il file
AdventureWorksService.svc
al progetto.
Configurazione del servizio
È necessario configurare il servizio in modo da usare il modello Entity Data Model creato.
Per configurare il servizio
Nel file di codice
AdventureWorks.svc
sostituire la dichiarazione di classeAdventureWorksService
con il codice seguente.public class AdventureWorksService : DataService<AdventureWorksLTEntities> { // This method is called only once to initialize service-wide policies. public static void InitializeService(IDataServiceConfiguration config) { config.SetEntitySetAccessRule("SalesOrderHeaders", EntitySetRights.All); } }
Public Class AdventureWorksService Inherits DataService(Of AdventureWorksLTEntities) ' This method is called only once to initialize service-wide policies. Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) config.SetEntitySetAccessRule("SalesOrderHeaders", EntitySetRights.All) config.UseVerboseErrors = True End Sub End Class
Questo codice aggiorna la classe
AdventureWorksService
in modo che derivi da un oggetto DataService<T> che usa la classe di contesto dell'oggettoAdventureWorksLTEntities
nel modello Entity Data Model. Aggiorna inoltre il metodoInitializeService
per consentire ai client del servizio l'accesso completo in lettura/scrittura all'entitàSalesOrderHeader
.Compilare il progetto e verificare che non siano presenti errori.
Creazione dell'applicazione client WPF
Per visualizzare i dati di WCF Data Service, creare una nuova applicazione WPF con un'origine dati basata sul servizio. Più avanti in questa procedura dettagliata, verranno aggiunti all'applicazione i controlli associati a dati.
Per creare l'applicazione client WPF
In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione, scegliere Aggiungi e selezionare Nuovo progetto.
Nella finestra di dialogo Nuovo progetto espandere Visual C# o Visual Basic, quindi selezionare Finestre.
Selezionare il modello di progetto Applicazione WPF.
Nella casella Nome digitare
AdventureWorksSalesEditor
e fare clic su OK.Visual Studio aggiunge il progetto
AdventureWorksSalesEditor
alla soluzione.Scegliere Mostra origini dati dal menu Dati.
Verrà visualizzata la finestra Origini dati.
Nella finestra Origini dati fare clic su Aggiungi nuova origine dati.
Verrà avviata la Configurazione guidata origine dati.
Nella pagina Seleziona un tipo di origine dati della procedura guidata selezionare Servizio, quindi fare clic su Avanti.
Nella finestra di dialogo Aggiungi riferimento al servizio fare clic su Individua.
Visual Studio cerca i servizi disponibili nella soluzione corrente e aggiunge
AdventureWorksService.svc
all'elenco dei servizi disponibili nella casella Servizi.Nella casella Spazio dei nomi digitare
AdventureWorksService
.Nella casella Servizi fare clic su AdventureWorksService.svc, quindi su OK.
Visual Studio scarica le informazioni sul servizio, quindi torna alla Configurazione guidata origine dati.
Nella pagina Aggiungi riferimento al servizio fare clic su Fine.
Visual Studio aggiunge i nodi che rappresentano i dati restituiti dal servizio nella finestra Origini dati.
Definizione dell'interfaccia utente della finestra
Aggiungere alcuni pulsanti alla finestra modificando il codice XAML in WPF Designer. Più avanti in questa procedura dettagliata, verrà aggiunto il codice che consente agli utenti di visualizzare e aggiornare i record delle vendite tramite questi pulsanti.
Per creare il layout della finestra
In Esplora soluzioni fare doppio clic su MainWindow.xaml.
La finestra verrà aperta in WPF Designer.
Nella visualizzazione XAML della finestra di progettazione aggiungere il codice seguente tra i tag
<Grid>
:<Grid.RowDefinitions> <RowDefinition Height="75" /> <RowDefinition Height="525" /> </Grid.RowDefinitions> <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75"><</Button> <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">></Button> <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
Compilare il progetto.
Creazione dei controlli associati a dati
Creare i controlli che consentono di visualizzare i record cliente trascinando il nodo SalesOrderHeaders
dalla finestra Origini dati alla finestra di progettazione.
Per creare i controlli associati a dati
Nella finestra Origini dati fare clic sul menu a discesa del nodo SalesOrderHeaders e selezionare Dettagli.
Espandere il nodo SalesOrderHeaders.
Poiché per questo esempio alcuni campi non verranno visualizzati, fare clic sul menu a discesa accanto ai nodi seguenti e selezionare Nessuno:
CreditCardApprovalCode
ModifiedDate
OnlineOrderFlag
RevisionNumber
rowguid
Questa azione impedisce a Visual Studio di creare i controlli associati a dati per questi nodi nel passaggio successivo. Per questa procedura dettagliata, si presume che l'utente finale non debba visualizzare questi dati.
Dalla finestra Origini dati trascinare il nodo SalesOrderHeaders nella riga della griglia sotto la riga contenente i pulsanti.
Visual Studio genera l'XAML e il codice che crea un set di controlli associati a dati nella tabella Product. Per altre informazioni sull'XAML e il codice generati, vedere Associazione di controlli WPF ai dati in Visual Studio.
Nella finestra di progettazione fare clic sulla casella di testo accanto all'etichetta Customer ID.
Nella finestra Proprietà selezionare la casella di controllo accanto alla proprietà IsReadOnly.
Impostare la proprietà IsReadOnly per ognuna delle caselle di testo seguenti:
Purchase Order Number
Sales Order ID
Sales Order Number
Caricamento dei dati dal servizio
Usare l'oggetto proxy del servizio per caricare i dati delle vendite dal servizio, quindi assegnare i dati restituiti all'origine dati per l'oggetto CollectionViewSource nella finestra WPF.
Per caricare i dati dal servizio
Nella finestra di progettazione fare doppio clic sul testo MainWindow per creare il gestore eventi
Window_Loaded
.Sostituire il gestore eventi con il codice seguente. Assicurarsi di sostituire l'indirizzo localhost in questo codice con l'indirizzo dell'host locale nel computer di sviluppo.
private AdventureWorksService.AdventureWorksLTEntities dataServiceClient; private System.Data.Services.Client.DataServiceQuery<AdventureWorksService.SalesOrderHeader> salesQuery; private CollectionViewSource ordersViewSource; private void Window_Loaded(object sender, RoutedEventArgs e) { // TODO: Modify the port number in the following URI as required. dataServiceClient = new AdventureWorksService.AdventureWorksLTEntities( new Uri("https://localhost:45899/AdventureWorksService.svc")); salesQuery = dataServiceClient.SalesOrderHeaders; ordersViewSource = ((CollectionViewSource)(this.FindResource("salesOrderHeadersViewSource"))); ordersViewSource.Source = salesQuery.Execute(); ordersViewSource.View.MoveCurrentToFirst(); }
Private DataServiceClient As AdventureWorksService.AdventureWorksLTEntities Private SalesQuery As System.Data.Services.Client.DataServiceQuery(Of AdventureWorksService.SalesOrderHeader) Private OrdersViewSource As CollectionViewSource Private Sub Window_Loaded(ByVal Sender As Object, ByVal e As RoutedEventArgs) Handles MyBase.Loaded ' TODO: Modify the port number in the following URI as required. DataServiceClient = New AdventureWorksService.AdventureWorksLTEntities( _ New Uri("https://localhost:32415/AdventureWorksService.svc")) SalesQuery = DataServiceClient.SalesOrderHeaders OrdersViewSource = CType(Me.FindResource("SalesOrderHeadersViewSource"), CollectionViewSource) OrdersViewSource.Source = SalesQuery.Execute() OrdersViewSource.View.MoveCurrentToFirst() End Sub
Esplorazione dei record delle vendite
Aggiungere il codice che consente agli utenti di scorrere i record delle vendite usando i pulsanti < e >.
Per consentire agli utenti di esplorare i record delle vendite
Nella finestra di progettazione fare doppio clic sul pulsante < nell'area della finestra.
Visual Studio apre il file code-behind e crea un nuovo gestore eventi
backButton_Click
per l'evento Click.Aggiungere il codice seguente al gestore eventi
backButton_Click
generato:if (ordersViewSource.View.CurrentPosition > 0) ordersViewSource.View.MoveCurrentToPrevious();
If OrdersViewSource.View.CurrentPosition > 0 Then OrdersViewSource.View.MoveCurrentToPrevious() End If
Tornare alla finestra di progettazione e fare doppio clic sul pulsante >.
Visual Studio apre il file code-behind e crea un nuovo gestore eventi
nextButton_Click
per l'evento Click.Aggiungere il codice seguente al gestore eventi
nextButton_Click
generato:if (ordersViewSource.View.CurrentPosition < ((CollectionView)ordersViewSource.View).Count - 1) { ordersViewSource.View.MoveCurrentToNext(); }
If OrdersViewSource.View.CurrentPosition < CType(OrdersViewSource.View, CollectionView).Count - 1 Then OrdersViewSource.View.MoveCurrentToNext() End If
Salvataggio delle modifiche ai record delle vendite
Aggiungere il codice che consente agli utenti di visualizzare e salvare le modifiche ai record delle vendite usando il pulsante Salva modifiche.
Per aggiungere la possibilità di salvare le modifiche ai record delle vendite
Nella finestra di progettazione fare doppio clic sul pulsante Salva modifiche.
Visual Studio apre il file code-behind e crea un nuovo gestore eventi
saveButton_Click
per l'evento Click.Aggiungere il codice seguente al gestore eventi
saveButton_Click
.AdventureWorksService.SalesOrderHeader currentOrder = (AdventureWorksService.SalesOrderHeader)ordersViewSource.View.CurrentItem; dataServiceClient.UpdateObject(currentOrder); dataServiceClient.SaveChanges();
Dim CurrentOrder As AdventureWorksService.SalesOrderHeader = CType(OrdersViewSource.View.CurrentItem, AdventureWorksService.SalesOrderHeader) DataServiceClient.UpdateObject(CurrentOrder) DataServiceClient.SaveChanges()
Verifica dell'applicazione
Compilare ed eseguire l'applicazione per verificare che sia possibile visualizzare e aggiornare i record cliente.
Per eseguire il test dell'applicazione
Nel menu Compila fare clic su Compila soluzione. Verificare che la soluzione venga compilata senza errori.
Premere CTRL+F5.
Visual Studio avvia il progetto AdventureWorksService senza eseguirne il debug.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto AdventureWorksSalesEditor.
Scegliere Debug dal menu di scelta rapida, quindi Avvia nuova istanza.
Verrà eseguita l'applicazione. Verificare quanto segue:
Nelle caselle di testo vengono visualizzati campi di dati diversi dal primo record di vendite il cui ID ordine vendite è 71774.
È possibile fare clic sui pulsanti > o < per spostarsi tra gli altri record delle vendite.
In uno dei record delle vendite digitare del testo nella casella Commento, quindi fare clic su Salva modifiche.
Chiudere l'applicazione, quindi avviarla di nuovo da Visual Studio.
Passare al record delle vendite modificato e verificare che la modifica sia presente dopo avere chiuso e riaperto l'applicazione.
Chiudere l'applicazione.
Passaggi successivi
Dopo avere completato questa procedura dettagliata, è possibile eseguire le attività correlate seguenti:
Imparare a usare la finestra Origini dati in Visual Studio per associare i controlli WPF ad altri tipi di origini dati. Per altre informazioni, vedere Procedura dettagliata: associazione di controlli WPF a un dataset.
Imparare a usare la finestra Origini dati in Visual Studio per visualizzare i dati correlati, ovvero i dati in una relazione padre-figlio, nei controlli WPF. Per altre informazioni, vedere Procedura dettagliata: visualizzazione dei dati correlati in un'applicazione WPF.
Vedere anche
Associazione di controlli WPF ai dati in Visual Studio
Procedura: associare controlli WPF ai dati in Visual Studio
Procedura dettagliata: associazione di controlli WPF a un dataset
Cenni preliminari
Panoramica su Entity Framework
Cenni preliminari su WPF e Silverlight Designer
Cenni preliminari sull'associazione dati