Instruções passo a passo: associando controles WPF a um WCF Data Services
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 Services. Você também adicionará botões que os clientes podem usar para exibir e atualizar registros.
Esta explicação 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 WCF Data Services 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 WCF Data Services e a fonte de dados subjacente.
Dica
Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.
Pré-requisitos
Você precisa dos seguintes componentes para concluir esta instrução 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. É possível baixar o banco de dados AdventureWorksLT no site do CodePlex.
Conhecimento prévio dos conceitos a seguir também é útil, mas não é necessário para concluir o passo a passo:
WCF Data Services. Para obter mais informações, consulte Visão geral do WCF Data Services.
Modelos de dados no WCF Data Services.
Modelos de Dados de Entidade e o ADO.NET Entity Framework. Para obter mais informações, consulte Visão geral do Entity Framework.
Trabalhando com o WPF Designer. Para obter mais informações, consulte WPF Designer Overview.
Associação de dados do WPF. Para obter mais informações, consulte Visão geral da vinculação de dados.
Criando o projeto de serviço
Comece este passo a passo criando um projeto para um WCF Data Services.
Para criar o projeto de serviço
Inicie o Visual Studio.
No menu Arquivo, aponte para Novo e clique em Projeto.
Expanda Visual C# ou Visual Basic e selecione Web.
Selecione o modelo de projeto Aplicativo Web ASP.NET.
Na caixa Nome, digite AdventureWorksService e clique em OK.
O Visual Studio cria o projeto AdventureWorksService.
No Gerenciador de Soluções, clique com o botão direito do mouse em Default.aspx e selecione Excluir. Este arquivo não é necessário neste passo a passo.
Criando um Modelo de Dados de Entidade para o serviço
Para expor os dados para um aplicativo usando um WCF Data Services, você deve definir um modelo de dados para o serviço. O WCF Data Services tem suporte a 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 interface IQueryable. Neste passo a passo, você criará um Modelo de Dados de Entidade para o modelo de dados.
Para criar um Modelo de Dados de Entidade
No menu Projeto, clique em Adicionar Novo Item.
Na lista Modelos Instalados, clique em Dados, e selecione o item do projeto Modelo de Dados de Entidade ADO.NET.
Mude o nome para AdventureWorksModel.edmx e clique em Adicionar.
O Assistente do Modelo de Dados de Entidade será aberto.
Na página Escolher Conteúdo do Modelo, clique em Gerar a partir do banco de dados e em Próximo.
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.
-ou-
Clique em Nova Conexão e crie uma conexão com o banco de dados AdventureWorksLT.
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 clique em Próximo.
Na página Escolher Objetos do Banco de Dados, expanda Tabelas e selecione a tabela SalesOrderHeader.
Clique em Finalizar.
Criando o serviço
Crie um WCF Data Services para expor os dados no Modelo de Dados de Entidade para um aplicativo WPF.
Para criar o serviço
No menu Projeto, selecione Adicionar Novo Item.
Na lista Modelos Instalados, clique em Web e selecione o item de projeto Serviço de Dados WCF.
Na caixa Nome, digite AdventureWorksService.svc e clique em Adicionar.
O Visual Studio adiciona o AdventureWorksService.svc ao projeto.
Configurando o serviço
Você deve configurar o serviço para operar no Modelo de Dados de Entidades que você criou.
Para configurar o serviço
No arquivo de código AdventureWorks.svc, substitua a declaração de classe AdventureWorksService pelo código a seguir.
Public Class AdventureWorksService Inherits DataService(Of AdventureWorksLTEntities) ' This method is called only once to initialize service-wide policies. Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) config.SetEntitySetAccessRule("SalesOrderHeaders", EntitySetRights.All) config.UseVerboseErrors = True End Sub End Class
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); } }
Esse código atualiza a classe AdventureWorksService para que ela derive de um DataService que opera na classe de contexto do objeto AdventureWorksLTEntities 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.
Crie o projeto e verifique se ele foi criado sem erros.
Criando o aplicativo cliente WPF
Para exibir os dados do WCF Data Services, 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.
Para criar o aplicativo cliente WPF
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.
Na caixa de diálogo Novo Projeto, expanda Visual Basic ou Visual C# e selecione Windows.
Selecione o modelo de projeto Aplicativo WPF.
Na caixa Nome, digite AdventureWorksSalesEditor e clique em OK.
O Visual Studio adiciona o projeto AdventureWorksSalesEditor à solução.
No menu Dados, clique em Mostrar Fontes de Dados.
A janela Fontes de Dados é aberta.
Na janela Fontes de Dados, clique em Adicionar Nova Fonte de Dados.
O Assistente de Configuração de Fonte de Dados é aberto.
Na página Escolher um Tipo de Fonte de Dados do assistente, selecione Serviço e clique em Próximo.
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 à lista de serviços disponíveis na caixa Serviços.
Na caixa Namespace, digite AdventureWorksService.
Na caixa Serviços, clique em AdventureWorksService.svc e em OK.
O Visual Studio baixa as informações de serviço e retorna ao Assistente de Configuração de Fonte de Dados.
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.
Definindo a interface do usuário da janela
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.
Para criar o layout da janela
No Gerenciador de Soluções, clique duas vezes em MainWindow.xaml.
A janela é aberta no WPF Designer.
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>
Compile o projeto.
Criando os controles de associação de dados
Crie controles que exibem registros do cliente ao arrastar o nó SalesOrderHeaders da janela Fontes de Dados para o designer.
Para criar os controles de associação de dados
Na janela Fontes de Dados, abra o menu da lista suspensa para o nó SalesOrderHeaders e selecione Detalhes.
Expanda o nó SalesOrderHeaders.
Neste exemplo, alguns campos não serão exibidos, portanto, clique no menu suspenso 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.
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 obter mais informações sobre XAML e código, consulte Associando controles WPF a dados no Visual Studio.
No designer, clique na caixa de texto ao lado do rótulo de ID do Cliente.
Na janela Propriedades, marque a caixa de seleção ao lado da propriedade IsReadOnly.
Configure a propriedade IsReadOnly para cada uma das seguintes caixas de texto:
Número da Ordem de Compra
ID da Ordem de Venda
Número da Ordem de Venda
Carregar os Dados do Serviço
Use o objeto de proxy de serviço para carregar os dados de vendas do serviço e atribua os dados retornados à fonte de dados para CollectionViewSource na janela WPF.
Para carregar os dados do serviço
No designer, clique duas vezes no texto onde se lê: MainWindow para criar o manipulador de eventos Window_Loaded.
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 DataServiceClient As AdventureWorksService.AdventureWorksLTEntities Private SalesQuery As System.Data.Services.Client.DataServiceQuery(Of AdventureWorksService.SalesOrderHeader) Private OrdersViewSource As CollectionViewSource Private Sub Window_Loaded(ByVal Sender As Object, ByVal e As RoutedEventArgs) Handles MyBase.Loaded ' TODO: Modify the port number in the following URI as required. DataServiceClient = New AdventureWorksService.AdventureWorksLTEntities( _ New Uri("https://localhost:32415/AdventureWorksService.svc")) SalesQuery = DataServiceClient.SalesOrderHeaders OrdersViewSource = CType(Me.FindResource("SalesOrderHeadersViewSource"), CollectionViewSource) OrdersViewSource.Source = SalesQuery.Execute() OrdersViewSource.View.MoveCurrentToFirst() End Sub
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("https://localhost:45899/AdventureWorksService.svc")); salesQuery = dataServiceClient.SalesOrderHeaders; ordersViewSource = ((CollectionViewSource)(this.FindResource("salesOrderHeadersViewSource"))); ordersViewSource.Source = salesQuery.Execute(); ordersViewSource.View.MoveCurrentToFirst(); }
Navegando nos registros de venda
Adicione o código que permite aos usuários percorrer os registros de vendas, usando os botões < e >.
Para permitir que os usuários naveguem nos registros de vendas
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.
Adicione o seguinte código ao manipulador de eventos backButton_Click gerado:
If OrdersViewSource.View.CurrentPosition > 0 Then OrdersViewSource.View.MoveCurrentToPrevious() End If
if (ordersViewSource.View.CurrentPosition > 0) ordersViewSource.View.MoveCurrentToPrevious();
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.
Adicione o seguinte código ao manipulador de eventos nextButton_Click gerado:
If OrdersViewSource.View.CurrentPosition < CType(OrdersViewSource.View, CollectionView).Count - 1 Then OrdersViewSource.View.MoveCurrentToNext() End If
if (ordersViewSource.View.CurrentPosition < ((CollectionView)ordersViewSource.View).Count - 1) { ordersViewSource.View.MoveCurrentToNext(); }
Salvando alterações em registros de vendas
Adicione o código que permite aos usuários visualizar e salvar as alterações em registros de vendas ao usar o botão Salvar alterações.
Para adicionar a capacidade de salvar as alterações em registros de vendas
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.
Adicione o seguinte código ao manipulador de eventos do saveButton_Click.
Dim CurrentOrder As AdventureWorksService.SalesOrderHeader = CType(OrdersViewSource.View.CurrentItem, AdventureWorksService.SalesOrderHeader) DataServiceClient.UpdateObject(CurrentOrder) DataServiceClient.SaveChanges()
AdventureWorksService.SalesOrderHeader currentOrder = (AdventureWorksService.SalesOrderHeader)ordersViewSource.View.CurrentItem; dataServiceClient.UpdateObject(currentOrder); dataServiceClient.SaveChanges();
Testando o aplicativo
Compile e execute o aplicativo para verificar se é possível exibir e atualizar os registros do cliente.
Para testar o aplicativo
No menu Compilar, clique em Compilar Solução. Verifique se a solução é compilada sem erros.
Pressione CTRL+F5.
O Visual Studio inicia o projeto AdventureWorksService sem depurá-lo.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto AdventureWorksSalesEditor.
No 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 a partir do primeiro registro de venda, que tem o ID de ordem de venda 71774.
Você pode clicar nos botões > ou < para navegar em outros registros de vendas.
Em um dos registros de vendas, digite algum texto na caixa Comentário e clique em Salvar alterações.
Feche o aplicativo e depois inicie-o novamente no Visual Studio.
Navegue até o registro de vendas que você alterou e verifique se a alteração persiste depois de fechar e reabrir o aplicativo.
Feche o aplicativo.
Próximas etapas
Depois de completar este passo a passo, você poderá realizar as seguintes tarefas relacionadas:
Saiba como usar a janela Fontes de Dados no Visual Studio para associar controles do WPF a outros tipos de fontes de dados. Para obter mais informações, consulte Instruções passo a passo: associando controles WPF a um conjunto de dados.
Saiba como usar a janela Fontes de Dados no Visual Studio para exibir dados relacionados (isto é, dados em uma relação pai-filho) em controles do WPF. Para obter mais informações, consulte Instruções passo a passo: exibindo dados relacionados em um aplicativo WPF.
Consulte também
Tarefas
Como associar controles WPF a dados no Visual Studio
Instruções passo a passo: associando controles WPF a um conjunto de dados
Conceitos
Associando controles WPF a dados no Visual Studio
Visão geral do WCF Data Services
Visão geral do Entity Framework
Visão geral da vinculação de dados