Udostępnij za pośrednictwem


Powiązywanie kontrolek WPF z usługą danych programu 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 instruktażu przedstawiono następujące zagadnienia:

  • 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 przechodzą do przodu i do tyłu przez rekordy klientów.

  • Tworzenie przycisku, który zapisuje zmiany w danych w kontrolkach w usłudze danych WCF i bazowym źródle danych.

Uwaga

Na komputerze mogą być wyświetlane różne nazwy lub lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio w tym artykule. Być może używasz innej wersji programu Visual Studio lub innych ustawień środowiska. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

  • Visual Studio

  • Dostęp do uruchomionego wystąpienia programu SQL Server lub programu SQL Server Express, do którego jest dołączona przykładowa baza 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:

  • Usługi danych programu WCF.

  • Modele danych w Usługi danych programu WCF.

  • Modele danych jednostek i ADO.NET Entity Framework. Aby uzyskać więcej informacji, zobacz Omówienie programu Entity Framework.

  • Powiązanie danych WPF. Aby uzyskać więcej informacji, zobacz Omówienie powiązania danych.

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 Eksplorator 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 jednostki i niestandardowe modele danych zdefiniowane przy użyciu obiektów środowiska uruchomieniowego języka wspólnego (CLR), które implementują IQueryable<T> interfejs. W tym przewodniku utworzysz model danych jednostki dla modelu danych.

  1. W menu Project (Projekt) kliknij pozycję Add New Item (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 połączenie jednostki w pozycji App.Config, a następnie wybierz przycisk Dalej.

  7. Na stronie Wybieranie obiektów bazy danych rozwiń węzeł Tabele, a następnie wybierz tabelę SalesOrderHeader.

  8. Kliknij przycisk 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. Aktualizuje również metodę InitializeService zezwalania klientom usługi na pełny dostęp do odczytu/zapisu do SalesOrderHeader jednostki.

  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 Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł rozwiązania, kliknij polecenie Dodaj, a następnie wybierz pozycję Nowy projekt.

  2. W oknie dialogowym Nowy projekt rozwiń węzeł 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 AdventureWorksSalesEditor projekt do rozwiązania.

  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.

    Zostanie otwarty 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, a następnie 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 Eksplorator rozwiązań kliknij dwukrotnie plik MainWindow.xaml.

    Zostanie otwarte okno 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

    • ModifiedDate

    • 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 siatki 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 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 serwera 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 obiektu 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 projektancie kliknij < dwukrotnie przycisk na powierzchni okna.

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

  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 za kodem i tworzy nową nextButton_Click procedurę obsługi zdarzeń dla Click zdarzenia.

  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 za kodem i tworzy nową saveButton_Click procedurę obsługi zdarzeń dla Click zdarzenia.

  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 jest kompilujące bez błędów.

  2. Naciśnij Ctrl+F5.

    Program Visual Studio uruchamia projekt AdventureWorksService bez debugowania go.

  3. W Eksplorator 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ść przez inne rekordy 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ę.

Następne kroki

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

  • Dowiedz się, jak używać okna Źródła danych w programie Visual Studio do powiązania kontrolek WPF z innymi typami źródeł danych. Aby uzyskać więcej informacji, zobacz Wiązanie kontrolek WPF z zestawem danych.

  • Dowiedz się, jak używać okna Źródła danych w programie Visual Studio do wyświetlania powiązanych danych (czyli danych w relacji nadrzędny-podrzędny) w kontrolkach WPF. Aby uzyskać więcej informacji, zobacz Przewodnik: wyświetlanie powiązanych danych w aplikacji WPF.