Condividi tramite


Procedura dettagliata: associazione di controlli WPF a un servizio dati WCF

In questa procedura dettagliata, verrà creata un'applicazione WPF contenente controlli associati a dati. I controlli vengono associati a record cliente incapsulati in un WCF Data Services. Si aggiungeranno inoltre pulsanti che i clienti possono utilizzare per visualizzare e aggiornare i record.

Vengono illustrate le attività seguenti:

  • Creazione di un modello Entity Data Model generato dai dati nel database di esempio AdventureWorksLT.

  • Creazione di un WCF Data Services che espone i dati del modello Entity Data Model a un'applicazione WPF.

  • Creazione di un set di controlli associati a dati mediante il trascinamento degli elementi dalla finestra Origini dati a Progettazione WPF.

  • Creazione di pulsanti per spostarsi avanti e indietro tra i record cliente.

  • Creazione di un pulsante per salvare in WCF Data Services e nell'origine dati sottostante le modifiche apportate ai dati nei controlli.

    Nota

    Il computer potrebbe mostrare nomi o percorsi diversi per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio in uso e le impostazioni utilizzate determinano questi elementi. Per ulteriori informazioni, vedere Gestione delle impostazioni.

Prerequisiti

Per completare la procedura dettagliata, è necessario disporre dei componenti seguenti:

  • Visual Studio 2010.

  • Istanza in esecuzione di SQL Server o SQL Server Express a cui è collegato il database di esempio AdventureWorksLT e cui è possibile accedere. Tale database può essere scaricato dal sito Web CodePlex (informazioni in lingua inglese).

Per completare la procedura dettagliata è inoltre consigliabile conoscere già i concetti seguenti:

Creazione del progetto del servizio

Avviare la procedura dettagliata creando un progetto per un WCF Data Services.

Per creare il progetto del servizio

  1. Avviare Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi Progetto.

  3. Espandere Visual C# o Visual Basic, quindi selezionare Web.

  4. Selezionare il modello di progetto Applicazione Web ASP.NET.

  5. Nella casella Nome digitare AdventureWorksService, quindi fare clic su OK.

    Visual Studio crea il progetto AdventureWorksService.

  6. 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 Entity Data Model per il servizio

Per esporre dati in un'applicazione utilizzando un WCF Data Services, è necessario definire un modello dati per il servizio. WCF Data Services supporta due tipi di modelli di dati: Entity Data Model e modelli di dati personalizzati definiti tramite oggetti CLR (Common Language Runtime) che implementano l'interfaccia IQueryable<T>. In questa procedura dettagliata, si crea un modello Entity Data Model per il modello di dati.

Per creare un modello Entity Data Model

  1. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  2. Selezionare l'elemento del progetto ADO.NET Entity Data Model.

  3. Denominarlo AdventureWorksModel.edmx e fare clic su Aggiungi.

    Verrà aperta la Creazione guidata Entity Data Model.

  4. Nella pagina Scegli contenuto Model fare clic su Genera da database, quindi su Avanti.

  5. Nella pagina Seleziona connessione dati selezionare una delle seguenti opzioni:

    • 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.

  6. Nella pagina Seleziona connessione dati assicurarsi che l'opzione Salva impostazioni di connessione dell'entità in App.Config come sia selezionata, quindi fare clic su Avanti.

  7. Nella pagina Seleziona oggetti di database espandere il nodo Tabelle, quindi selezionare la tabella SalesOrderHeader.

  8. Scegliere Fine.

Creazione del servizio

Creazione di un WCF Data Services per esporre i dati del modello Entity Data Model a un'applicazione WPF.

Per creare il servizio

  1. Scegliere Aggiungi nuovo elemento dal menu Progetto.

  2. Selezionare l'elemento del progetto WCF Data Service.

  3. Nella casella Nome digitare AdventureWorksService.svc, quindi fare clic su Aggiungi.

    In Visual Studio verrà aggiunto al progetto il file AdventureWorksService.svc.

Configurazione del servizio

È necessario configurare il servizio in modo che operi sul modello Entity Data Model creato.

Per configurare il servizio

  1. Nel file di codice AdventureWorks.svc sostituire la dichiarazione di classe AdventureWorksService con il codice seguente.

    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
    
    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);
        }
    }
    

    Questo codice aggiorna la classe AdventureWorksService in modo che derivi da un oggetto DataService<T> che opera sulla classe del contesto dell'oggetto AdventureWorksLTEntities nel modello Entity Data Model. Aggiorna inoltre il metodo InitializeService per consentire ai client del servizio l'accesso completo in lettura/scrittura all'entità SalesOrderHeader.

    Per ulteriori informazioni sulle classi di contesto di oggetto in ADO.NET Entity Framework, vedere Object Services Overview (Entity Framework).

  2. Compilare il progetto e verificare che non siano presenti errori.

Creazione dell'applicazione client WPF

Per visualizzare i dati in WCF Data Services, creare una nuova applicazione WPF con un'origine dati basata sul servizio. Più avanti in questa procedura dettagliata, si aggiungeranno all'applicazione controlli associati a dati.

Per creare l'applicazione client WPF

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo della soluzione, scegliere Aggiungi e selezionare Nuovo progetto.

    Nota

    Nei progetti di Visual Basic il nodo della soluzione viene visualizzato in Esplora soluzioni solo quando la casella di controllo Mostra sempre soluzione è selezionata in Finestra di dialogo Opzioni, Progetti e soluzioni, Generale.

  2. Nella finestra di dialogo Nuovo progetto espandere Visual C# o Visual Basic, quindi selezionare Finestre.

  3. Selezionare il modello di progetto Applicazione WPF.

  4. Digitare AdventureWorksSalesEditor nella casella Nome e scegliere OK.

    Il progetto AdventureWorksSalesEditor viene aggiunto alla soluzione.

  5. Scegliere Mostra origini dati dal menu Dati.

    Verrà visualizzata la finestra Origini dati.

  6. Nella finestra Origini dati fare clic su Aggiungi nuova origine dati.

    Verrà avviata la Configurazione guidata origine dati.

  7. Nella pagina Seleziona un tipo di origine dati della procedura guidata selezionare Servizio Web, quindi fare clic su Avanti.

  8. Nella finestra di dialogo Aggiungi riferimento al servizio fare clic sul Individua.

    In Visual Studio viene eseguita la ricerca dei servizi disponibili nella soluzione corrente e AdventureWorksService.svc viene aggiunto all'elenco di servizi disponibili nella casella Servizi.

  9. Nella casella Spazio dei nomi digitare AdventureWorksService.

  10. 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.

  11. Nella pagina Aggiungi riferimento al servizio fare clic su Fine.

    Vengono aggiunti nodi che rappresentano i dati restituiti dal servizio alla finestra Origini dati.

Definizione dell'interfaccia utente della finestra

Aggiungere alcuni pulsanti alla finestra modificando il codice XAML in Progettazione WPF. Più avanti in questa procedura dettagliata, si aggiungerà il codice che consente agli utenti di visualizzare e aggiornare i record delle vendite tramite questi pulsanti.

Per creare il layout della finestra

  1. In Esplora soluzioni fare doppio clic su MainWindow.xaml.

    La finestra verrà aperta in Progettazione WPF.

  2. 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">&lt;</Button>
    <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">&gt;</Button>
    <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>
    
  3. Compilare il progetto.

Creazione dei controlli associati a dati

Creare controlli che consentono di visualizzare i record cliente tramite trascinamento del nodo SalesOrderHeaders dalla finestra Origini dati alla finestra di progettazione.

Per creare i controlli associati a dati

  1. Nella finestra Origini dati fare clic sul menu a discesa relativo al nodo SalesOrderHeaders, quindi selezionare Dettagli.

  2. Espandere il nodo SalesOrderHeaders.

  3. 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 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.

  4. Dalla finestra Origini dati trascinare il nodo SalesOrderHeaders nella riga della griglia sotto la riga contenente i pulsanti.

    Visual Studio genera il file XAML e il codice che crea un set di controlli associati a dati nella tabella Product. Per ulteriori informazioni sul linguaggio XAML e sul codice generati, vedere Associazione di controlli WPF ai dati in Visual Studio.

  5. Nella finestra di progettazione fare clic sulla casella di testo accanto all'etichetta ID cliente.

  6. Nella finestra Proprietà selezionare la casella di controllo accanto alla proprietà IsReadOnly.

  7. Impostare la proprietà IsReadOnly per ognuna delle caselle di testo seguenti:

    • Numero ordine di acquisto

    • ID ordine di vendita

    • Numero ordine vendita

Caricamento dei dati dal servizio

Utilizzare l'oggetto proxy del servizio per caricare 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

  1. Nella finestra di progettazione fare doppio clic sul testo MainWindow per creare il gestore dell'evento Window_Loaded.

  2. Sostituire il gestore dell'evento con il codice riportato di seguito. Assicurarsi di sostituire l'indirizzo localhost in questo codice con l'indirizzo dell'host locale nel computer di sviluppo.

    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
    
    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();
    }
    

Esplorazione dei record delle vendite

Aggiungere il codice che consente agli utenti di scorrere i record delle vendite utilizzando i pulsanti < e >.

Per consentire agli utenti di esplorare i record delle vendite

  1. Nella finestra di progettazione fare doppio clic sul pulsante < nell'area della finestra.

    In Visual Studio viene aperto il file code-behind e creato un nuovo gestore dell'evento backButton_Click per l'evento Click.

  2. Sostituire il gestore eventi backButton_Click generato con il codice seguente:

    If OrdersViewSource.View.CurrentPosition > 0 Then
        OrdersViewSource.View.MoveCurrentToPrevious()
    End If
    
    if (ordersViewSource.View.CurrentPosition > 0)
        ordersViewSource.View.MoveCurrentToPrevious();
    
  3. 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.

  4. Sostituire con il codice seguente il gestore eventi nextButton_Click generato.

    If OrdersViewSource.View.CurrentPosition < CType(OrdersViewSource.View, CollectionView).Count - 1 Then
        OrdersViewSource.View.MoveCurrentToNext()
    End If
    
    if (ordersViewSource.View.CurrentPosition < ((CollectionView)ordersViewSource.View).Count - 1)
    {
        ordersViewSource.View.MoveCurrentToNext();
    }
    

Salvataggio delle modifiche ai record delle vendite

Aggiungere il codice che consente agli utenti di visualizzare e di salvare le modifiche ai record delle vendite utilizzando il pulsante Salva modifiche.

Per aggiungere la possibilità di salvare le modifiche ai record delle vendite

  1. 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.

  2. Aggiungere il codice seguente al gestore eventi saveButton_Click.

    Dim CurrentOrder As AdventureWorksService.SalesOrderHeader = CType(OrdersViewSource.View.CurrentItem, AdventureWorksService.SalesOrderHeader)
    
    DataServiceClient.UpdateObject(CurrentOrder)
    DataServiceClient.SaveChanges()
    
    AdventureWorksService.SalesOrderHeader currentOrder = (AdventureWorksService.SalesOrderHeader)ordersViewSource.View.CurrentItem;
    dataServiceClient.UpdateObject(currentOrder);
    dataServiceClient.SaveChanges();
    

Verifica dell'applicazione

Compilare ed eseguire l'applicazione per verificare che sia possibile visualizzare e aggiornare record cliente.

Per eseguire il test dell'applicazione

  1. Scegliere Compila soluzione dal menu Compila. Verificare che la soluzione venga compilata senza errori.

  2. Premere CTRL+F5.

    Visual Studio avvia il progetto AdventureWorksService senza eseguirne il debug.

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto AdventureWorksSalesEditor.

  4. Scegliere Debug dal menu di scelta rapida, quindi Avvia nuova istanza.

    L'applicazione verrà eseguita. Verificare quanto segue:

    • Nelle caselle di testo vengono visualizzati campi diversi di dati dal primo record di vendite il cui ID di ordine di vendita è 71774.

    • È possibile fare clic sui pulsanti > o < per spostarsi tra gli altri record delle vendite.

  5. In uno dei record delle vendite digitare un testo nella casella Commento, quindi fare clic su Salva modifiche.

  6. Chiudere l'applicazione, quindi avviarla nuovamente da Visual Studio.

  7. Passare al record delle vendite modificato e verificare che la modifica permanga dopo avere chiuso e riaperto l'applicazione.

  8. Chiudere l'applicazione.

Passaggi successivi

Dopo avere completato questa procedura dettagliata, è possibile eseguire le attività correlate seguenti:

Vedere anche

Attività

Procedura: associare controlli WPF ai dati in Visual Studio

Procedura dettagliata: associazione di controlli WPF a un Entity Data Model

Procedura dettagliata: associazione di controlli WPF a un dataset

Concetti

Associazione di controlli WPF ai dati in Visual Studio

Cenni preliminari su WPF e Silverlight Designer

Data Binding Overview

Altre risorse

ADO.NET Data Services Framework Overview

Data Model

Entity Data Model

Introducing the Entity Framework