Partilhar via


Associar controles do WPF a um WCF Data Service

Neste passo a passo, você criará um aplicativo WPF que contém controles de associação de dados. Os controles estão associados a registros de clientes que são encapsulados em um WCF Data Service. Você também adicionará botões que os clientes podem usar para exibir e atualizar registros.

Este passo a passo ilustra as seguintes tarefas:

  • Criando um Modelo de Dados de Entidade que é gerado a partir de dados no banco de dados de exemplo AdventureWorksLT.

  • Criando um que expõe os dados no Modelo de Dados de Entidade para um aplicativo WPF.

  • Criando um conjunto de controles de associação de dados ao arrastar itens da janela Fontes de Dados para o WPF Designer.

  • Criando botões que navegam para a frente e para trás nos registros de clientes.

  • Criando um botão que salva as alterações dos dados nos controles para o e a fonte de dados subjacente.

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio neste artigo. Você pode estar usando outra edição do Visual Studio ou outras configurações de ambiente. Para obter mais informações, confira Personalizar o IDE.

Pré-requisitos

Você precisará dos seguintes componentes para concluir este passo a passo:

  • Visual Studio

  • Acesso a uma instância em execução do SQL Server ou SQL Server Express que tenha o banco de dados de exemplo AdventureWorksLT anexado a ele. Para baixar o banco de dados, consulte os bancos de dados de exemplo do AdventureWorks

Conhecimento prévio dos conceitos a seguir também é útil, mas não é necessário para concluir o passo a passo:

Criar o projeto de serviço

  1. Inicie este passo a passo criando um projeto C# ou Visual Basic ASP.NET Aplicativo Web. Nomeie o projeto AdventureWorksService.

  2. No Gerenciador de Soluções, clique com o botão direito do mouse em Default.aspx e selecione Excluir. Esse arquivo não é necessário para o passo a passo.

Crie um Modelo de Dados de Entidade para o serviço

Para expor os dados para um aplicativo usando um Serviço de Dados WCF, você deve definir um modelo de dados para o serviço. O Serviço de Dados WFCF, dois tipos de modelos de dados: Modelos de Dados de Entidade e modelos de dados personalizados definidos usando objetos CRL (Common Language Runtime) que implementam a IQueryable<T> interface. Neste passo a passo, você criará um Modelo de Dados de Entidade para o modelo de dados.

  1. No menu Projeto , clique em Adicionar Novo Item.

  2. Na lista Modelos Instalados, clique em Dados e selecione o item do projeto Modelo de Dados de Entidade ADO.NET.

  3. Altere o nome para AdventureWorksModel.edmxe clique em Adicionar.

    O Assistente do Modelo de Dados de Entidade será aberto.

  4. Na página Escolher Conteúdo do Modelo, clique em Gerar do banco de dados e em Avançar.

  5. Na página Escolha a Conexão de Dados, selecione uma das seguintes opções:

    • Se uma conexão de dados com o banco de dados de exemplo AdventureWorksLT estiver disponível na lista suspensa, selecione-a.

    • Clique em Nova Conexão e crie uma conexão com o banco de dados AdventureWorksLT.

  6. Na página Escolha a Conexão de Dados, verifique se a opção Salvar configurações de conexão de entidade em App.Config como está selecionada e selecione Avançar.

  7. Na página Escolher Objetos do Banco de Dados, expanda Tabelas e selecione a tabela SalesOrderHeader.

  8. Clique em Concluir.

Criar o serviço

Crie um Serviço de Dados do WCF para expor os dados no Modelo de Dados de Entidade a um aplicativo WPF:

  1. No menu Projeto, selecione Adicionar novo item.

  2. Na lista Modelos Instalados, clique em Web e selecione o item de projeto Serviço de Dados WCF.

  3. Na caixa Nome, digite AdventureWorksService.svc e clique em OK.

    O Visual Studio adiciona AdventureWorksService.svc ao projeto.

Configurar o serviço

Você deve configurar o serviço para operar no Modelo de Dados de Entidade que você criou:

  1. No arquivo de AdventureWorks.svc códigos, substitua o AdventureWorksService declaração se sala com os seguintes códigos.

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

    Este código atualiza a classe AdventureWorksService, de modo que ela deriva de umDataService<T> que operaAdventureWorksLTEntities na classe de contexto do objeto em seu Modelo de Dados de Entidade. Ele também atualiza o método InitializeService para permitir aos clientes do serviço acesso completo de leitura/gravação à entidade SalesOrderHeader.

  2. Crie o projeto e verifique se ele foi criado sem erros.

Para criar o aplicativo cliente WPF

Para exibir os dados do WCF Data Service, crie um novo aplicativo WPF com uma fonte de dados que se baseie no serviço. A seguir neste passo a passo, você adicionará controles de associação de dados ao aplicativo.

  1. No Gerenciador de Soluções, clique com o botão direito do mouse no nó da solução, clique em Adicionar e selecione Novo Projeto.

  2. Na caixa de diálogo Novo Projeto, expanda Visual Basic ou Visual C# e selecione Windows.

  3. Selecione o modelo de projeto Aplicativo WPF.

  4. Na caixa Nome, digite AdventureWorksSalesEditor e clique em OK.

    O Visual Studio adiciona o AdventureWorksSalesEditor projeto à solução.

  5. No menu Dados, clique em Mostrar Fontes de Dados.

    A janela Fontes de Dados é aberta.

  6. Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados.

    O Assistente de Configuração de Fonte de Dados é aberto.

  7. Na página Escolher um Tipo de Fonte de Dados do assistente, selecione Serviço e selecione Avançar.

  8. Na caixa de diálogo Adicionar Referência de Serviço, clique em Descobrir.

    O Visual Studio pesquisa a solução atual para os serviços disponíveis e acrescenta AdventureWorksService.svc AdventureWorksService.svc à lista de serviços disponíveis na caixa Serviços.

  9. Na caixa Namespace, digite AdventureWorksService.

  10. Na caixa Serviços, clique em AdventureWorksService.svc e selecione OK.

    O Visual Studio baixa as informações de serviço e retorna ao Assistente de Configuração de Fonte de Dados.

  11. Na página Adicionar Referência de Serviço, clique em Concluir.

    O Visual Studio adiciona nós que representam os dados retornados pelo serviço à janela Fontes de Dados.

Definir a interface do usuário

Adicione vários botões à janela, modificando o XAML no WPF Designer. A seguir neste passo a passo, você adicionará código que permite aos usuários exibir e atualizar registros de vendas usando esses botões.

  1. No Gerenciador de Soluções, clique duas vezes em MainWindow.xaml.

    A janela é aberta no WPF Designer.

  2. Na exibição XAML do designer, adicione o seguinte código entre as marcas<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. Compile o projeto.

Criar os controles associados a dados

Crie controles que exibem registros do cliente ao arrastar o SalesOrderHeadersnó SalesOrderHeaders da janela Fontes de Dados para o designer.

  1. Na janela Fontes de Dados, clique no menu da lista suspensa para o nó SalesOrderHeaders e selecione Detalhes.

  2. Expanda o nó SalesOrderHeaders.

  3. Neste exemplo, alguns campos não serão exibidos, portanto, clique no menu da lista suspensa ao lado dos seguintes nós e selecione Nenhum:

    • CreditCardApprovalCode

    • ModifiedDate

    • OnlineOrderFlag

    • RevisionNumber

    • rowguid

    Essa ação impede que o Visual Studio crie controles de associação de dados para esses nós na etapa seguinte. Para este passo a passo, pressupõe-se que o usuário final não precise ver esses dados.

  4. Na janela Fontes de Dados, arraste o nó SalesOrderHeaders para a linha de grade sob a linha que contém os botões.

    O Visual Studio gera XAML e código que criam um conjunto de controles associados a dados na tabela Produto. Para mais informações sobre o XAML e o código gerados, consulte Associar controles WPF a dados no Visual Studio.

  5. No designer, clique na caixa de texto ao lado do rótulo de ID do Cliente.

  6. Na janela Propriedades, marque a caixa de seleção ao lado da propriedade IsReadOnly.

  7. Configure a propriedade IsReadOnly para cada uma das seguintes caixas de texto:

    • Número da Ordem de Compra

    • ID da Ordem de Venda

    • Sales Order Number

Carregar os dados do serviço

Use o objeto proxy de serviço para carregar dados de vendas do serviço. Em seguida, atribua os dados retornados à fonte de dados para a CollectionViewSource janela do WPF.

  1. No designer, para criar o Window_Loaded manipulador de eventos, clique duas vezes no texto que diz: MainWindow.

  2. Substitua o manipulador de eventos pelo código a seguir. Substitua o endereço localhost neste código pelo endereço de host local no computador de desenvolvimento.

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

Adicione o código que permite aos usuários rolem nos registros de vendas, usando os botões < e >.

  1. No designer, clique duas vezes no botão < na superfície da janela.

    O Visual Studio abre o arquivo code-behind e cria um novo manipulador de eventos backButton_Click para o evento Click.

  2. Adicione o seguinte código ao manipulador de eventos backButton_Click gerado:

    if (ordersViewSource.View.CurrentPosition > 0)
        ordersViewSource.View.MoveCurrentToPrevious();
    
  3. Retorne ao designer e clique duas vezes no botão >.

    O Visual Studio abre o arquivo code-behind e cria um novo manipulador de eventos nextButton_Click para o evento Click.

  4. Adicione o seguinte código ao manipulador de eventos nextButton_Click gerado:

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

Salvar alterações nos registros de vendas

Adicione o código que permite aos usuários exibir e salvar as alterações em registros de vendas ao usar o botão Salvar alterações:

  1. No designer, clique duas vezes no botão Salvar Alterações.

    O Visual Studio abre o arquivo code-behind e cria um novo manipulador de eventos saveButton_Click para o evento Click.

  2. Adicione o seguinte código ao manipulador de eventos do saveButton_Click.

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

Testar o aplicativo

Compile e execute o aplicativo para verificar se é possível exibir e atualizar os registros do cliente:

  1. No menu Compilar, clique em Compilar Solução. Verifique se a solução é compilada sem erros.

  2. Pressione Ctrl++F5.

    O Visual Studio inicia o projeto AdventureWorksService sem depurá-lo.

  3. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto AdventureWorksSalesEditor.

  4. No menu de clique com o botão direito do mouse (menu de contexto), em Depurar, clique em Iniciar nova instância.

    O aplicativo é executado. Verifique o seguinte:

    • As caixas de texto exibem diferentes campos de dados desde o primeiro registro de venda, que tem a ID de ordem de venda 71774.

    • Você pode clicar nos botões > ou < para navegar em outros registros de vendas.

  5. Em um dos registros de vendas, digite algum texto na caixa Comentário e selecione Salvar alterações.

  6. Feche o aplicativo e depois inicie-o novamente no Visual Studio.

  7. Navegue até o registro de vendas que você alterou e verifique se a alteração persiste depois de fechar e reabrir o aplicativo.

  8. Feche o aplicativo.

Próximas etapas

Depois de completar este passo a passo, você poderá realizar as seguintes tarefas relacionadas: