Freigeben über


Binden von WPF-Steuerelementen an einen WCF-Datendienst

In dieser exemplarischen Vorgehensweise erstellen Sie eine WPF-Anwendung, die datengebundene Steuerelemente enthält. Die Steuerelemente sind an Kundendatensätze gebunden, die in einem WCF-Datendienst gekapselt sind. Außerdem fügen Sie Schaltflächen hinzu, mit denen Kunden Datensätze anzeigen und aktualisieren können.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Erstellen eines Entitätsdatenmodells, das aus Daten in der AdventureWorksLT-Beispieldatenbank generiert wird.

  • Erstellen eines WCF-Datendiensts, der die Daten im Entitätsdatenmodell für eine WPF-Anwendung verfügbar macht.

  • Erstellen einer Gruppe von datengebundenen Steuerelementen durch Ziehen von Elementen aus dem Datenquellenfenster in den WPF-Designer.

  • Erstellen von Schaltflächen, die vorwärts und rückwärts durch Kundendatensätze navigieren.

  • Erstellen einer Schaltfläche, die Änderungen an Daten in den Steuerelementen im WCF-Datendienst und der zugrunde liegenden Datenquelle speichert.

Hinweis

Die Anleitungen in diesem Artikel veranschaulichen die neueste Version der interaktiven Entwicklungsumgebung (IDE), die in Visual Studio verfügbar ist. Auf Ihrem Computer werden möglicherweise andere Namen oder Positionen für einige der Elemente der Benutzeroberfläche angezeigt. Möglicherweise verwenden Sie eine andere Version von Visual Studio oder andere Umgebungseinstellungen. Weitere Informationen finden Sie unter Personalisieren der IDE-.

Voraussetzungen

Sie benötigen die folgenden Komponenten, um diese Schritt-für-Schritt-Anleitung abzuschließen.

  • Visual Studio

  • Zugriff auf eine ausgeführte Instanz von SQL Server oder SQL Server Express, die der AdventureWorksLT-Beispieldatenbank zugeordnet ist. Informationen zum Herunterladen der Datenbank finden Sie in AdventureWorks-Beispieldatenbanken

Vorkenntnisse der folgenden Konzepte sind ebenfalls hilfreich, aber nicht erforderlich, um die exemplarische Vorgehensweise abzuschließen:

Erstellen des Dienstprojekts

  1. Beginnen Sie diese Anleitung, indem Sie ein C#- oder Visual Basic ASP.NET-Webanwendungsprojekt erstellen. Benennen Sie das Projekt AdventureWorksService.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Default.aspx , und wählen Sie "Löschen" aus. Diese Datei ist für die Anleitung nicht erforderlich.

Erstellen eines Entitätsdatenmodells für den Dienst

Um Daten mithilfe eines WCF-Datendiensts für eine Anwendung verfügbar zu machen, müssen Sie ein Datenmodell für den Dienst definieren. Der WCF Data Service unterstützt zwei Arten von Datenmodellen: Entity Data Models und benutzerdefinierte Datenmodelle, die mithilfe von CLR-Objekten (Common Language Runtime) definiert werden, die die IQueryable<T> Schnittstelle implementieren. In dieser exemplarischen Vorgehensweise erstellen Sie ein Entitätsdatenmodell für das Datenmodell.

  1. Klicken Sie im Menü Project auf Neues Element hinzufügen.

  2. Klicken Sie in der Liste "Installierte Vorlagen" auf "Daten", und wählen Sie dann das projektelement ADO.NET Entitätsdatenmodell aus .

  3. Ändern Sie den Namen in AdventureWorksModel.edmx, und klicken Sie auf "Hinzufügen".

    Der Entitätsdatenmodell-Assistent wird geöffnet.

  4. Klicken Sie auf der Seite " Modellinhalt auswählen " auf " Aus Datenbank generieren", und klicken Sie dann auf "Weiter".

  5. Wählen Sie auf der Seite " Datenverbindung auswählen" eine der folgenden Optionen aus:

    • Wenn eine Datenverbindung mit der AdventureWorksLT-Beispieldatenbank in der Dropdownliste verfügbar ist, wählen Sie sie aus.

    • Klicken Sie auf "Neue Verbindung", und erstellen Sie eine Verbindung mit der AdventureWorksLT-Datenbank.

  6. Achten Sie darauf, dass auf der Seite Ihre Datenverbindung auswählen die Option Entitätsverbindungseinstellungen in App.Config speichern unter aktiviert ist, und wählen Sie anschließend Weiter aus.

  7. Erweitern Sie auf der Seite "Datenbankobjekte auswählen"Tabellen, und wählen Sie dann die Tabelle "SalesOrderHeader" aus.

  8. Klicken Sie auf Fertig stellen.

Erstellen des Diensts

Erstellen Sie einen WCF-Datendienst, um die Daten im Entitätsdatenmodell für eine WPF-Anwendung verfügbar zu machen:

  1. Wählen Sie im Menü "Projekt " die Option "Neues Element hinzufügen" aus.

  2. Klicken Sie in der Liste "Installierte Vorlagen " auf "Web", und wählen Sie dann das WCF Data Service-Projektelement aus.

  3. Geben Sie AdventureWorksService.svcim Feld "Name" den Namen ein, und klicken Sie auf "Hinzufügen".

    Visual Studio fügt das AdventureWorksService.svc dem Projekt hinzu.

Konfigurieren des Diensts

Sie müssen den Dienst so konfigurieren, dass er für das von Ihnen erstellte Entitätsdatenmodell ausgeführt wird:

  1. Ersetzen Sie in der AdventureWorks.svc Codedatei die AdventureWorksService-Klassendeklaration durch den folgenden Code.

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

    Dieser Code aktualisiert die AdventureWorksService-Klasse , sodass sie von einer DataService<T> abgeleitet wird, die auf der AdventureWorksLTEntities Objektkontextklasse in Ihrem Entity Data Model ausgeführt wird. Außerdem wird die InitializeService Methode aktualisiert, um Clients des Diensts den vollständigen Lese-/Schreibzugriff auf die SalesOrderHeader Entität zu ermöglichen.

  2. Erstellen Sie das Projekt, und überprüfen Sie, ob es ohne Fehler erstellt wird.

Erstellen der WPF-Clientanwendung

Um die Daten aus dem WCF-Datendienst anzuzeigen, erstellen Sie eine neue WPF-Anwendung mit einer Datenquelle, die auf dem Dienst basiert. Später in dieser exemplarischen Vorgehensweise fügen Sie der Anwendung datengebundene Steuerelemente hinzu.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektmappenknoten, klicken Sie auf "Hinzufügen", und wählen Sie "Neues Projekt" aus.

  2. Erweitern Sie im Dialogfeld "Neues Projekt " Visual C# oder Visual Basic, und wählen Sie dann Windows aus.

  3. Wählen Sie die Projektvorlage "WPF-Anwendung " aus.

  4. Geben Sie AdventureWorksSalesEditorim Feld "Name" den Namen ein, und klicken Sie auf "OK".

    Visual Studio fügt das AdventureWorksSalesEditor Projekt zur Lösung hinzu.

  5. Klicken Sie im Menü "Daten " auf " Datenquellen anzeigen".

    Das Fenster "Datenquellen " wird geöffnet.

  6. Klicken Sie im Fenster Datenquellen auf Neue Datenquelle hinzufügen.

    Der Assistent zum Konfigurieren von Datenquellen wird geöffnet.

  7. Wählen Sie auf der Seite "Datenquellentyp auswählen" des Assistenten "Dienst" und dann "Weiter" aus.

  8. Klicken Sie im Dialogfeld " Dienstverweis hinzufügen " auf "Ermitteln".

    Visual Studio durchsucht die aktuelle Lösung nach verfügbaren Diensten und fügt AdventureWorksService.svc der Liste der verfügbaren Dienste im Services-Feld hinzu.

  9. Geben Sie im Feld "Namespace " "AdventureWorksService" ein.

  10. Klicken Sie im Feld "Dienste " auf "AdventureWorksService.svc", und wählen Sie dann "OK" aus.

    Visual Studio lädt die Dienstinformationen herunter und kehrt dann zum Assistenten für die Datenquellenkonfiguration zurück.

  11. Klicken Sie auf der Seite " Dienstverweis hinzufügen " auf "Fertig stellen".

    Visual Studio fügt Knoten hinzu, die die vom Dienst zurückgegebenen Daten zum Fenster "Datenquellen " darstellen.

Definieren der Benutzeroberfläche

Fügen Sie dem Fenster mehrere Schaltflächen hinzu, indem Sie den XAML-Code im WPF-Designer ändern. Später in dieser exemplarischen Vorgehensweise fügen Sie Code hinzu, mit dem Benutzer Verkaufsdatensätze mithilfe dieser Schaltflächen anzeigen und aktualisieren können.

  1. Doppelklicken Sie im Projektmappen-Explorer auf "MainWindow.xaml".

    Das Fenster wird im WPF-Designer geöffnet.

  2. Fügen Sie in der XAML-Ansicht des Designers den folgenden Code zwischen den <Grid> Tags hinzu:

    <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. Projekt erstellen.

Erstellen der datengebundenen Steuerelemente

Erstellen Sie Steuerelemente, die Kundendatensätze anzeigen, indem Sie den SalesOrderHeaders Knoten aus dem Datenquellenfenster in den Designer ziehen.

  1. Klicken Sie im Fenster "Datenquellen " auf das Dropdownlistenmenü für den Knoten "SalesOrderHeaders ", und wählen Sie "Details" aus.

  2. Erweitern Sie den Knoten SalesOrderHeaders.

  3. In diesem Beispiel werden einige Felder nicht angezeigt. Klicken Sie daher auf das Dropdownlistenmenü neben den folgenden Knoten, und wählen Sie "Keine" aus:

    • CreditCardApprovalCode

    • ModifiedDate

    • OnlineOrderFlag

    • RevisionNumber

    • rowguid

    Diese Aktion verhindert, dass Visual Studio im nächsten Schritt datengebundene Steuerelemente für diese Knoten erstellt. Gehen Sie für diese exemplarische Vorgehensweise davon aus, dass der Endbenutzer diese Daten nicht sehen muss.

  4. Ziehen Sie im Fenster "Datenquellen " den Knoten "SalesOrderHeaders " in die Rasterzeile unter der Zeile, die die Schaltflächen enthält.

    Visual Studio generiert XAML und Code, der eine Gruppe von Steuerelementen erstellt, die an Daten in der Produkttabelle gebunden sind. Weitere Informationen zu generiertem XAML und Code finden Sie unter Binden von WPF-Steuerelementen an Daten in Visual Studio.

  5. Klicken Sie im Designer auf das Textfeld neben der Bezeichnung "Kunden-ID ".

  6. Aktivieren Sie im Eigenschaftenfenster das Kontrollkästchen neben der IsReadOnly-Eigenschaft .

  7. Legen Sie die IsReadOnly-Eigenschaft für jedes der folgenden Textfelder fest:

    • Bestellnummer

    • Verkaufsauftrags-ID

    • Verkaufsauftragsnummer

Laden Sie die Daten aus dem Dienst

Verwenden Sie das Dienstproxyobjekt, um Verkaufsdaten aus dem Dienst zu laden. Weisen Sie dann die zurückgegebenen Daten der Datenquelle für CollectionViewSource im WPF-Fenster zu.

  1. Doppelklicken Sie im Designer, um den Window_Loaded Ereignishandler zu erstellen, auf den Text, der lautet: MainWindow.

  2. Ersetzen Sie den Ereignishandler durch den folgenden Code. Stellen Sie sicher, dass Sie die localhost Adresse in diesem Code durch die lokale Hostadresse auf Ihrem Entwicklungscomputer ersetzen.

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

Fügen Sie Code hinzu, mit dem Nutzer mithilfe der Schaltflächen < und > durch Verkaufsdatensätze scrollen können.

  1. Doppelklicken Sie im Designer auf die < Schaltfläche auf der Fensteroberfläche.

    Visual Studio öffnet die CodeBehind-Datei und erstellt einen neuen backButton_Click Ereignishandler für das Click Ereignis.

  2. Fügen Sie dem generierten backButton_Click Ereignishandler den folgenden Code hinzu:

    if (ordersViewSource.View.CurrentPosition > 0)
        ordersViewSource.View.MoveCurrentToPrevious();
    
  3. Kehren Sie zum Designer zurück, und doppelklicken Sie auf die > Schaltfläche.

    Visual Studio öffnet die CodeBehind-Datei und erstellt einen neuen nextButton_Click Ereignishandler für das Click Ereignis.

  4. Fügen Sie dem generierten nextButton_Click Ereignishandler den folgenden Code hinzu:

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

Speichern von Änderungen an Verkaufsdatensätzen

Fügen Sie Code hinzu, mit dem Benutzer Änderungen an Verkaufsdatensätzen anzeigen und speichern können, indem Sie die Schaltfläche " Änderungen speichern " verwenden:

  1. Doppelklicken Sie im Designer auf die Schaltfläche " Änderungen speichern ".

    Visual Studio öffnet die CodeBehind-Datei und erstellt einen neuen saveButton_Click Ereignishandler für das Click Ereignis.

  2. Fügen Sie dem saveButton_Click Ereignishandler den folgenden Code hinzu.

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

Testen der Anwendung

Erstellen Sie die Anwendung, und führen Sie sie aus, um zu überprüfen, ob Sie Kundendatensätze anzeigen und aktualisieren können:

  1. Klicken Sie im Menü Erstellen auf Lösung erstellen. Stellen Sie sicher, dass die Lösung ohne Fehler erstellt wird.

  2. Drücken Sie STRG+F5.

    Visual Studio startet das AdventureWorksService-Projekt , ohne es zu debuggen.

  3. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das AdventureWorksSalesEditor-Projekt .

  4. Klicken Sie im Kontextmenü unter Debug auf Neue Instanz starten.

    Die Anwendung wird ausgeführt. Überprüfen Sie Folgendes:

    • In den Textfeldern werden unterschiedliche Datenfelder aus dem ersten Verkaufsdatensatz angezeigt, der die Auftrags-ID 71774 aufweist.

    • Sie können auf die >- oder die <-Schaltflächen klicken, um durch andere Verkaufsdatensätze zu navigieren.

  5. Geben Sie in einem der Verkaufsdatensätze Text in das Feld "Kommentar" ein, und wählen Sie dann " Änderungen speichern" aus.

  6. Schließen Sie die Anwendung, und starten Sie die Anwendung erneut aus Visual Studio.

  7. Navigieren Sie zu dem umsatzdatensatz, den Sie geändert haben, und überprüfen Sie, ob die Änderung nach dem Schließen und erneuten Öffnen der Anwendung erhalten bleibt.

  8. Schließen Sie die Anwendung.

Nächste Schritte

Nach Abschluss dieser exemplarischen Vorgehensweise können Sie die folgenden verwandten Aufgaben ausführen: