Binda WPF-kontroller till en WCF-datatjänst

I den här genomgången skapar du ett WPF-program som innehåller databundna kontroller. Kontrollerna är bundna till kundposter som kapslas in i en WCF-datatjänst. Du kommer också att lägga till knappar som kunder kan använda för att visa och uppdatera poster.

I den här genomgången tas följande aktiviteter upp:

  • Skapa en entitetsdatamodell som genereras från data i AdventureWorksLT-exempeldatabasen.

  • Skapa en WCF-datatjänst som exponerar data i entitetsdatamodellen för ett WPF-program.

  • Skapa en uppsättning databundna kontroller genom att dra objekt från fönstret Datakällor till WPF-designern.

  • Skapa knappar som navigerar framåt och bakåt genom kundposter.

  • Skapa en knapp som sparar ändringar i data i kontrollerna till WCF Data Service och den underliggande datakällan.

Anmärkning

Anvisningarna i den här artikeln illustrerar den senaste versionen av den interaktiva utvecklingsupplevelsen (IDE) som är tillgänglig i Visual Studio. Datorn kan visa olika namn eller platser för vissa av användargränssnittselementen. Du kanske använder en annan version av Visual Studio eller andra miljöinställningar. Mer information finns i Anpassa IDE-.

Förutsättningar

Du behöver följande komponenter för att slutföra den här genomgången:

  • Visual Studio

  • Åtkomst till en instans av SQL Server eller SQL Server Express som har AdventureWorksLT-exempeldatabasen kopplad till sig. Information om hur du laddar ned databasen finns i AdventureWorks exempeldatabaser

Förkunskaper om följande begrepp är också användbara, men krävs inte för att slutföra genomgången:

Skapa tjänstprojektet

  1. Starta den här genomgången genom att skapa ett C#- eller Visual Basic-ASP.NET webbprogramprojekt . Ge projektet namnet AdventureWorksService.

  2. Högerklicka på Default.aspx i Solution Explorer och välj Ta bort. Den här filen är inte nödvändig för genomgången.

Skapa en entitetsdatamodell för tjänsten

Om du vill exponera data för ett program med hjälp av en WCF-datatjänst måste du definiera en datamodell för tjänsten. WCF Data Service stöder två typer av datamodeller: Entitetsdatamodeller och anpassade datamodeller som definieras med hjälp av CLR-objekt (Common Language Runtime) som implementerar IQueryable<T> gränssnittet. I den här genomgången skapar du en entitetsdatamodell för datamodellen.

  1. På menyn Project klickar du på Lägg till nytt objekt.

  2. I listan Installerade mallar klickar du på Data och väljer sedan projektobjektet ADO.NET entitetsdatamodell .

  3. Ändra namnet till AdventureWorksModel.edmxoch klicka på Lägg till.

    Guiden Entitetsdatamodell öppnas.

  4. På sidan Välj modellinnehåll klickar du på Generera från databasen och klickar på Nästa.

  5. På sidan Välj dataanslutning väljer du något av följande alternativ:

    • Om en dataanslutning till AdventureWorksLT-exempeldatabasen är tillgänglig i listrutan väljer du den.

    • Klicka på Ny anslutning och skapa en anslutning till AdventureWorksLT-databasen.

  6. På sidan Välj dataanslutning kontrollerar du att alternativet Spara entitetsanslutning i App.Config som är markerat och välj sedan Nästa.

  7. På sidan Välj databasobjekt expanderar du Tabeller och väljer sedan tabellen SalesOrderHeader .

  8. Klicka på Finish.

Skapa tjänsten

Skapa en WCF-datatjänst för att exponera data i entitetsdatamodellen för ett WPF-program:

  1. Projekt-menyn väljer du Lägg till nytt objekt.

  2. I listan Installerade mallar klickar du på Webb och väljer sedan projektobjektet WCF Data Service .

  3. I rutan Namn skriver du AdventureWorksService.svcoch klickar på Lägg till.

    Visual Studio lägger AdventureWorksService.svc till i projektet.

Konfigurera tjänsten

Du måste konfigurera tjänsten så att den fungerar på den entitetsdatamodell som du skapade:

  1. AdventureWorks.svc I kodfilen ersätter du klassdeklarationen AdventureWorksService med följande kod.

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

    Den här koden uppdaterar klassen AdventureWorksService så att den härleds från en DataService<T> som körs på objektkontextklassen AdventureWorksLTEntities i din entitetsdatamodell. Den uppdaterar också InitializeService metoden så att tjänstens klienter får fullständig läs-/skrivåtkomst till entiteten SalesOrderHeader.

  2. Skapa projektet och kontrollera att det skapas utan fel.

Skapa WPF-klientprogrammet

Om du vill visa data från WCF Data Service skapar du ett nytt WPF-program med en datakälla som baseras på tjänsten. Senare i den här genomgången lägger du till databundna kontroller i programmet.

  1. Högerklicka på lösningsnoden i Solution Explorer, klicka på Lägg till och välj Nytt projekt.

  2. I dialogrutan Nytt projekt expanderar du Visual C# eller Visual Basic och väljer sedan Windows.

  3. Välj projektmallen WPF-program .

  4. I rutan Namn skriver du AdventureWorksSalesEditoroch klickar på OK.

    Visual Studio lägger till AdventureWorksSalesEditor projektet i lösningen.

  5. På menyn Data klickar du på Visa datakällor.

    Fönstret Datakällor öppnas.

  6. I fönstret datakällor klickar du på Lägg till ny datakälla.

    Guiden Konfiguration av datakälla öppnas.

  7. På sidan Välj datakällatyp i guiden väljer du Tjänst och sedan Nästa.

  8. I dialogrutan Lägg till tjänstreferens klickar du på Identifiera.

    Visual Studio söker efter tillgängliga tjänster i den aktuella lösningen och lägger AdventureWorksService.svc till i listan över tillgängliga tjänster i rutan Tjänster .

  9. I rutan Namnområde skriver du AdventureWorksService.

  10. I rutan Tjänster klickar du på AdventureWorksService.svc och väljer sedan OK.

    Visual Studio laddar ned tjänstinformationen och återgår sedan till guiden Konfiguration av datakälla .

  11. På sidan Lägg till tjänstreferens klickar du på Slutför.

    Visual Studio lägger till noder som representerar de data som returneras av tjänsten i fönstret Datakällor .

Definiera användargränssnittet

Lägg till flera knappar i fönstret genom att ändra XAML i WPF-designern. Senare i den här genomgången lägger du till kod som gör det möjligt för användare att visa och uppdatera försäljningsposter med hjälp av dessa knappar.

  1. Dubbelklicka på MainWindow.xaml i Solution Explorer.

    Fönstret öppnas i WPF-designern.

  2. I XAML-vyn för designern lägger du till följande kod mellan taggarna <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>
    
  3. Skapa projektet.

Skapa de databundna kontrollerna

Skapa kontroller som visar kundposter genom att dra SalesOrderHeaders-noden från fönstret Datakällor till designern.

  1. I fönstret Datakällor klickar du på listmenyn för noden SalesOrderHeaders och väljer Information.

  2. Expandera noden SalesOrderHeaders .

  3. I det här exemplet visas inte några fält, så klicka på listrutan bredvid följande noder och välj Ingen:

    • CreditCardApprovalCode

    • ModifiedDate

    • OnlineOrderFlag

    • RevisionNumber

    • rowguid

    Den här åtgärden förhindrar att Visual Studio skapar databundna kontroller för dessa noder i nästa steg. Anta att slutanvändaren inte behöver se dessa data för den här genomgången.

  4. Dra noden SalesOrderHeaders från fönstret Datakällor till rutnätsraden under raden som innehåller knapparna.

    Visual Studio genererar XAML och kod som skapar en uppsättning kontroller som är bundna till data i tabellen Produkt . Mer information om den genererade XAML och koden finns i Binda WPF-kontroller till data i Visual Studio.

  5. Klicka på textrutan bredvid etiketten Kund-ID i designern.

  6. I fönstret Egenskaper markerar du kryssrutan bredvid egenskapen IsReadOnly .

  7. Ange egenskapen IsReadOnly för var och en av följande textrutor:

    • Inköpsordernummer

    • Försäljningsorder-ID

    • Försäljningsordernummer

Läsa in data från tjänsten

Använd tjänstproxyobjektet för att läsa in försäljningsdata från tjänsten. Tilldela sedan returnerade data till datakällan för CollectionViewSource i WPF-fönstret.

  1. Om du vill skapa Window_Loaded händelsehanteraren i designern dubbelklickar du på texten som lyder: MainWindow.

  2. Ersätt händelsehanteraren med följande kod. Se till att du ersätter adressen i den localhost här koden med den lokala värdadressen på utvecklingsdatorn.

    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("http://localhost:45899/AdventureWorksService.svc"));
        salesQuery = dataServiceClient.SalesOrderHeaders;
    
        ordersViewSource = ((CollectionViewSource)(this.FindResource("salesOrderHeadersViewSource")));
        ordersViewSource.Source = salesQuery.Execute();
        ordersViewSource.View.MoveCurrentToFirst();
    }
    

Lägg till kod som gör det möjligt för användare att bläddra igenom försäljningsposter med hjälp av knapparna < och > .

  1. Dubbelklicka på < knappen på fönsterytan i designern.

    Visual Studio öppnar filen bakom koden och skapar en ny backButton_Click händelsehanterare för Click händelsen.

  2. Lägg till följande kod i den genererade backButton_Click händelsehanteraren:

    if (ordersViewSource.View.CurrentPosition > 0)
        ordersViewSource.View.MoveCurrentToPrevious();
    
  3. Gå tillbaka till designern och dubbelklicka på > knappen.

    Visual Studio öppnar filen bakom koden och skapar en ny nextButton_Click händelsehanterare för Click händelsen.

  4. Lägg till följande kod i den genererade nextButton_Click händelsehanteraren:

    if (ordersViewSource.View.CurrentPosition < ((CollectionView)ordersViewSource.View).Count - 1)
    {
        ordersViewSource.View.MoveCurrentToNext();
    }
    

Spara ändringar i försäljningsposter

Lägg till kod som gör det möjligt för användare att både visa och spara ändringar i försäljningsposter med hjälp av knappen Spara ändringar :

  1. Dubbelklicka på knappen Spara ändringar i designern.

    Visual Studio öppnar filen bakom koden och skapar en ny saveButton_Click händelsehanterare för Click händelsen.

  2. Lägg till följande kod i händelsehanteraren för saveButton_Click.

    AdventureWorksService.SalesOrderHeader currentOrder = (AdventureWorksService.SalesOrderHeader)ordersViewSource.View.CurrentItem;
    dataServiceClient.UpdateObject(currentOrder);
    dataServiceClient.SaveChanges();
    

Testa programmet

Skapa och kör programmet för att kontrollera att du kan visa och uppdatera kundposter:

  1. Klicka påBuild Solution (Skapa lösning) på Build-menyn. Kontrollera att lösningen skapas utan fel.

  2. Tryck på Ctrl+F5.

    Visual Studio startar AdventureWorksService-projektet utan att felsöka det.

  3. Högerklicka på projektet AdventureWorksSalesEditor i Solution Explorer.

  4. På högerklicksmenyn under Felsök klickar du på Starta ny instans.

    Programmet körs. Kontrollera följande:

    • Textrutorna visar olika datafält från den första försäljningsposten, som har försäljningsorder-ID :t 71774.

    • Du kan klicka på knapparna > eller < för att navigera genom andra försäljningsposter.

  5. I en av försäljningsposterna skriver du text i rutan Kommentar och väljer sedan Spara ändringar.

  6. Stäng programmet och starta sedan programmet igen från Visual Studio.

  7. Gå till den försäljningspost som du ändrade och kontrollera att ändringen kvarstår när du har stängt och öppnat programmet igen.

  8. Stäng programmet.

Nästa steg

När du har slutfört den här genomgången kan du utföra följande relaterade uppgifter: