Udostępnij za pośrednictwem


Wiązanie kontrolek WPF z usługą danych WCF

W tym przewodniku utworzysz aplikację WPF zawierającą kontrolki powiązane z danymi. Kontrolki są powiązane z rekordami klientów, które są hermetyzowane w usłudze danych WCF. Dodasz również przyciski, których klienci mogą używać do wyświetlania i aktualizowania rekordów.

W tym przewodniku przedstawiono następujące zadania:

  • Tworzenie modelu danych jednostki wygenerowanego na podstawie danych w przykładowej bazie danych AdventureWorksLT.

  • Tworzenie usługi danych WCF, która uwidacznia dane w modelu danych jednostki w aplikacji WPF.

  • Tworzenie zestawu kontrolek powiązanych z danymi przez przeciąganie elementów z okna Źródła danych do projektanta WPF.

  • Tworzenie przycisków, które nawigują do przodu i do tyłu przez rekordy klientów.

  • Tworzenie przycisku, który zapisuje zmiany danych w kontrolkach do usługi danych WCF i bazowego źródła danych.

Uwaga / Notatka

Instrukcje przedstawione w tym artykule ilustrują najnowszą wersję interaktywnego środowiska projektowego (IDE) dostępnego w programie Visual Studio. Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika. Być może używasz innej wersji programu Visual Studio lub różnych ustawień środowiska. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Wymagania wstępne

Do ukończenia tego przewodnika potrzebne są następujące składniki:

  • Visual Studio

  • Dostęp do uruchomionego wystąpienia programu SQL Server lub SQL Server Express, do którego dołączono przykładową bazę danych AdventureWorksLT. Aby pobrać bazę danych, zobacz Przykładowe bazy danych AdventureWorks

Wcześniejsza wiedza na temat poniższych pojęć jest również przydatna, ale nie jest wymagana do ukończenia przewodnika:

Tworzenie projektu usługi

  1. Rozpocznij ten przewodnik, tworząc projekt aplikacji internetowej w języku C# lub Visual Basic ASP.NET. Nadaj projektowi nazwę AdventureWorksService.

  2. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy Default.aspx i wybierz polecenie Usuń. Ten plik nie jest niezbędny w przewodniku.

Tworzenie modelu danych jednostki dla usługi

Aby uwidocznić dane w aplikacji przy użyciu usługi danych WCF, należy zdefiniować model danych dla usługi. Usługa danych WCF obsługuje dwa typy modeli danych: Modele danych encji oraz niestandardowe modele danych zdefiniowane przy użyciu obiektów wspólnego środowiska uruchomieniowego (CLR), które implementują interfejs IQueryable<T>. W tym przewodniku utworzysz model danych jednostki dla modelu danych.

  1. W menu projektu kliknij pozycję Dodaj nowy element.

  2. Na liście Zainstalowane szablony kliknij pozycję Dane, a następnie wybierz element projektu ADO.NET Entity Data Model .

  3. Zmień nazwę na AdventureWorksModel.edmx, a następnie kliknij przycisk Dodaj.

    Zostanie otwarty kreator Modelu danych jednostki .

  4. Na stronie Wybieranie zawartości modelu kliknij pozycję Generuj z bazy danych, a następnie kliknij przycisk Dalej.

  5. Na stronie Wybieranie połączenia danych wybierz jedną z następujących opcji:

    • Jeśli na liście rozwijanej jest dostępne połączenie danych z przykładową bazą danych AdventureWorksLT, wybierz je.

    • Kliknij pozycję Nowe połączenie i utwórz połączenie z bazą danych AdventureWorksLT.

  6. Na stronie Wybieranie połączenia danych upewnij się, że wybrano opcję Zapisz ustawienia połączenia w App.Config jako, a następnie wybierz Dalej.

  7. Na stronie Wybierz obiekty bazy danych rozwiń Tabele, a następnie wybierz tabelę SalesOrderHeader.

  8. Kliknij przycisk Finish (Zakończ).

Tworzenie usługi

Utwórz usługę danych WCF, aby uwidocznić dane w modelu danych jednostki w aplikacji WPF:

  1. W menu Project (Projekt ) wybierz pozycję Add New Item (Dodaj nowy element).

  2. Na liście Zainstalowane szablony kliknij pozycję Sieć Web, a następnie wybierz element projektu Usługi danych WCF .

  3. W polu Nazwa wpisz AdventureWorksService.svc, a następnie kliknij przycisk Dodaj.

    Program Visual Studio dodaje element AdventureWorksService.svc do projektu.

Konfigurowanie usługi

Należy skonfigurować usługę tak, aby działała w utworzonym modelu danych jednostki:

  1. AdventureWorks.svc W pliku kodu zastąp deklarację klasy AdventureWorksService następującym kodem.

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

    Ten kod aktualizuje klasę AdventureWorksService , tak aby pochodziła z DataService<T> klasy kontekstowej AdventureWorksLTEntities obiektu w modelu danych jednostki. Metoda InitializeService została również zaktualizowana, aby umożliwić klientom usługi pełny dostęp do odczytu/zapisu dla jednostki SalesOrderHeader.

  2. Skompiluj projekt i sprawdź, czy kompiluje się bez błędów.

Tworzenie aplikacji klienckiej WPF

Aby wyświetlić dane z usługi danych WCF, utwórz nową aplikację WPF ze źródłem danych opartym na usłudze. W dalszej części tego przewodnika do aplikacji zostaną dodane kontrolki powiązane z danymi.

  1. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy węzeł rozwiązania, kliknij pozycję Dodaj, a następnie wybierz pozycję Nowy projekt.

  2. W oknie dialogowym Nowy projekt rozwiń Visual C# lub Visual Basic, a następnie wybierz pozycję Windows.

  3. Wybierz szablon projektu Aplikacja WPF .

  4. W polu Nazwa wpisz AdventureWorksSalesEditor, a następnie kliknij przycisk OK.

    Program Visual Studio dodaje projekt AdventureWorksSalesEditor do solucji.

  5. W menu Dane kliknij pozycję Pokaż źródła danych.

    Zostanie otwarte okno Źródła danych .

  6. W oknie Źródła danych kliknij pozycję Dodaj nowe źródło danych.

    Otwiera się kreator Konfiguracja źródła danych.

  7. Na stronie Wybierz typ źródła danych kreatora wybierz pozycję Usługa, a następnie wybierz pozycję Dalej.

  8. W oknie dialogowym Dodawanie odwołania do usługi kliknij pozycję Odnajdź.

    Program Visual Studio wyszukuje bieżące rozwiązanie pod kątem dostępnych usług i dodaje AdventureWorksService.svc je do listy dostępnych usług w polu Usługi .

  9. W polu Przestrzeń nazw wpisz AdventureWorksService.

  10. W polu Usługi kliknij pozycję AdventureWorksService.svc, a następnie wybierz przycisk OK.

    Program Visual Studio pobiera informacje o usłudze, po czym wraca do kreatora konfiguracji źródła danych.

  11. Na stronie Dodawanie odwołania do usługi kliknij przycisk Zakończ.

    Program Visual Studio dodaje węzły reprezentujące dane zwrócone przez usługę do okna Źródła danych .

Definiowanie interfejsu użytkownika

Dodaj kilka przycisków do okna, modyfikując kod XAML w projektancie WPF. W dalszej części tego przewodnika dodasz kod, który umożliwia użytkownikom wyświetlanie i aktualizowanie rekordów sprzedaży przy użyciu tych przycisków.

  1. W Eksploratorze rozwiązań kliknij dwukrotnie plik MainWindow.xaml.

    Okno otwiera się w projektancie WPF.

  2. W widoku XAML projektanta dodaj następujący kod między tagami <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. Skompiluj projekt.

Tworzenie kontrolek powiązanych z danymi

Utwórz kontrolki, które wyświetlają rekordy klientów, przeciągając SalesOrderHeaders węzeł z okna Źródła danych do projektanta.

  1. W oknie Źródła danych kliknij menu rozwijane dla węzła SalesOrderHeaders i wybierz pozycję Szczegóły.

  2. Rozwiń węzeł SalesOrderHeaders.

  3. W tym przykładzie niektóre pola nie będą wyświetlane, dlatego kliknij menu rozwijane obok następujących węzłów i wybierz pozycję Brak:

    • CreditCardApprovalCode

    • Data modyfikacji

    • OnlineOrderFlag

    • Numer poprawki

    • rowguid

    Ta akcja uniemożliwia programowi Visual Studio tworzenie kontrolek powiązanych z danymi dla tych węzłów w następnym kroku. W tym przewodniku przyjęto założenie, że użytkownik końcowy nie musi widzieć tych danych.

  4. W oknie Źródła danych przeciągnij węzeł SalesOrderHeaders do wiersza w siatce znajdującego się pod wierszem zawierającym przyciski.

    Program Visual Studio generuje kod XAML i tworzy zestaw kontrolek powiązanych z danymi w tabeli Product . Aby uzyskać więcej informacji na temat wygenerowanego kodu XAML i kodu, zobacz Bind WPF controls to data in Visual Studio (Wiązanie kontrolek WPF z danymi w programie Visual Studio).

  5. W projektancie kliknij w pole tekstowe obok etykiety Identyfikator klienta.

  6. W oknie Właściwości zaznacz pole wyboru obok właściwości IsReadOnly .

  7. Ustaw właściwość IsReadOnly dla każdego z następujących pól tekstowych:

    • Numer zamówienia zakupu

    • Identyfikator zamówienia sprzedaży

    • Numer zamówienia sprzedaży

Ładowanie danych z usługi

Użyj obiektu proxy usługi, aby załadować dane sprzedaży z usługi. Następnie przypisz zwrócone dane do źródła danych dla CollectionViewSource w oknie WPF.

  1. W projektancie, aby utworzyć procedurę Window_Loaded obsługi zdarzeń, kliknij dwukrotnie tekst, który brzmi: MainWindow.

  2. Zastąp program obsługi zdarzeń następującym kodem. Upewnij się, że adres w tym kodzie został zastąpiony localhost adresem hosta lokalnego na komputerze dewelopera.

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

Dodaj kod, który umożliwia użytkownikom przewijanie rekordów sprzedaży przy użyciu przycisków < i >.

  1. W edytorze projektowania dwukrotnie kliknij przycisk < na powierzchni okna.

    Program Visual Studio otwiera plik z kodem i tworzy nową backButton_Click procedurę obsługi zdarzenia dla zdarzenia Click.

  2. Dodaj następujący kod do wygenerowanego backButton_Click programu obsługi zdarzeń:

    if (ordersViewSource.View.CurrentPosition > 0)
        ordersViewSource.View.MoveCurrentToPrevious();
    
  3. Wróć do projektanta i kliknij dwukrotnie przycisk >.

    Program Visual Studio otwiera plik z kodem i tworzy nową nextButton_Click procedurę obsługi zdarzenia dla zdarzenia Click.

  4. Dodaj następujący kod do wygenerowanego nextButton_Click programu obsługi zdarzeń:

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

Zapisywanie zmian w rekordach sprzedaży

Dodaj kod, który umożliwia użytkownikom wyświetlanie i zapisywanie zmian w rekordach sprzedaży przy użyciu przycisku Zapisz zmiany :

  1. W projektancie kliknij dwukrotnie przycisk Zapisz zmiany .

    Program Visual Studio otwiera plik z kodem i tworzy nową saveButton_Click procedurę obsługi zdarzenia dla zdarzenia Click.

  2. Dodaj następujący kod do programu obsługi zdarzeń saveButton_Click.

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

Testowanie aplikacji

Skompiluj i uruchom aplikację, aby sprawdzić, czy można wyświetlać i aktualizować rekordy klientów:

  1. W menu Kompilacja kliknij pozycję Kompiluj rozwiązanie. Sprawdź, czy rozwiązanie kompiluje się bez błędów.

  2. Naciśnij Ctrl+F5.

    Program Visual Studio uruchamia projekt AdventureWorksService bez debugowania go.

  3. W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt AdventureWorksSalesEditor .

  4. W menu prawym przyciskiem myszy (menu kontekstowe) w obszarze Debuguj kliknij pozycję Uruchom nowe wystąpienie.

    Aplikacja jest uruchamiana. Sprawdź następujące:

    • Pola tekstowe zawierają różne pola danych z pierwszego rekordu sprzedaży, który ma identyfikator zamówienia sprzedaży 71774.

    • Możesz kliknąć przyciski > lub <, aby przejść do innych rekordów sprzedaży.

  5. W jednym z rekordów sprzedaży wpisz tekst w polu Komentarz , a następnie wybierz pozycję Zapisz zmiany.

  6. Zamknij aplikację, a następnie ponownie uruchom aplikację z poziomu programu Visual Studio.

  7. Przejdź do zmienionego rekordu sprzedaży i sprawdź, czy zmiana będzie się powtarzać po zamknięciu i ponownym otwarciu aplikacji.

  8. Zamknij aplikację.

Dalsze kroki

Po ukończeniu tego przewodnika możesz wykonać następujące powiązane zadania: