Passo a passo: Vinculação de controles WPF para um serviço de dados do WCF
Em essa explicação passo a passo, você criará um aplicativo WPF que contém controles associados a dados.Os controles são associados aos registros de clientes que são encapsulados em WCF Data Services.Você também irá adicionar botões que os clientes podem usar para exibir e atualizar registros.
Essa explicação passo a passo mostra as seguintes tarefas:
Criando um modelo de dados de entidade que é gerado de dados no banco de dados de exemplo AdventureWorksLT.
Criando WCF Data Services que expõe os dados no modelo de dados de entidade a um aplicativo WPF.
Criando um conjunto de controles associados a dados arrastando itens da janela de Fontes de Dados o WPF designer.
Criando os botões que navegam registros de módulos dianteiros e inverso de cliente.
Criando um botão que salva alterações aos dados nos controles a WCF Data Services e para a fonte de dados subjacente.
Observação 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 Configurações de Visual Studio.
Pré-requisitos
Para completar este passo-a-passo, são necessários os seguintes componentes:
Visual Studio
Acesso a uma instância do SQL Server em execução ou SQL Server Express que tenha o banco de dados de exemplo AdventureWorksLT anexou-lhe.Você pode baixar o banco de dados AdventureWorksLT de site de CodePlex.
O conhecimento prévio dos seguintes conceitos também é útil, mas não necessário para concluir a explicação passo a passo:
Serviços WCF de dados.Para mais informações, consulte ADO.NET Data Services Framework Overview.
Modelos de dados em WCF Data Services.
Modelos de dados de entidade e a estrutura de entidade ADO.NET.Para mais informações, consulte Introducing the Entity Framework.
Trabalhando com o designer WPF.Para mais informações, consulte WPF e Silverlight Designer Overview.
O WPF associação de dados.Para obter mais informações, consulte: Visão geral de vinculação de dados.
Criando o projeto de serviço
Iniciar este explicação passo a passo criar um projeto para WCF Data Services.
Para criar o projeto de serviço
Inicie o Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
Expanda Visual C# ou Visual Basic, selecione Web.
Selecione o modelo de projeto de Aplicação Web ASP.NET .
Em a caixa de Nome , digite e clique AdventureWorksServiceOK.
O Visual Studio cria o projeto de AdventureWorksService .
Em Gerenciador de Soluções, clique com o botão direito do mouse Default.aspx e selecione Excluir.Este arquivo não é necessário em essa explicação passo a passo.
Criando um modelo de dados de entidade para o serviço
Para expor dados a um aplicativo usando WCF Data Services, você deve definir um modelo de dados para o serviço.WCF Data Services suporta dois tipos de modelos de dados: Os modelos de dados de entidade e modelos personalizados de dados que são definidos usando o common language runtime (CLR) objeto que implementa a interface de IQueryable<T>.Em essa explicação passo a passo, você cria um modelo de dados de entidade para o modelo de dados.
Para criar um modelo de dados de entidade
No menu Project, clique em Add New Item.
Modelos instalados lista, clique Dados, e selecione o item de projeto de Modelo de entidade de dados ADO.NET .
Altere o nome para AdventureWorksModel.edmx, e clique Adicionar.
Assistente de modelo de dados de entidade Abre.
Em a página de Escolha o conteúdo modelo , clique Gere de banco de dados, e clique Avançar.
Em a página de Escolha a Conexão de Dados , selecione uma das seguintes opções:
Se uma conexão de dados ao banco de dados de exemplo AdventureWorksLT está disponível na lista suspensa, selecione.
- ou -
Clique Nova conexão e criar uma conexão para o banco de dados AdventureWorksLT.
Em a página de Escolha a Conexão de Dados , certifique-se de que a opção de Salvar configurações de conexão de entidade em App.Config como está selecionada e clique em Avançar.
Em a página de Escolher Objetos do Banco de Dados , expanda Tabelas, selecione a tabela de SalesOrderHeader .
Clique em Concluir.
Criando o serviço
Crie WCF Data Services para expor os dados no modelo de dados de entidade a um aplicativo WPF.
Para criar o serviço
No menu Project, selecione Add New Item.
Modelos instalados lista, clique Web, e selecione o item de projeto de Serviço de dados WCF .
Em a caixa de Nome , digite e clique AdventureWorksService.svcAdicionar.
O Visual Studio adiciona AdventureWorksService.svc ao projeto.
Configurando o serviço
Você deve configurar o serviço para operar no modelo de dados de entidade que você criou.
Para configurar o serviço
Em o arquivo de código de AdventureWorks.svc , substitua a declaração de classe de AdventureWorksService com o 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 de AdventureWorksService de modo que deriva de DataService<T> que opera na classe de contexto de objeto de AdventureWorksLTEntities no seu modelo de dados de entidade.Também atualiza o método de InitializeService para permitir que clientes de acesso de leitura/gravação completo para a entidade de serviço de SalesOrderHeader .
Compilar o projeto, e verifique que compila sem erros.
Criando o aplicativo cliente WPF
Para exibir os dados de WCF Data Services, crie um novo aplicativo WPF com uma fonte de dados que é baseado no serviço.Posteriormente em esta explicação passo a passo, você adicionará controles associados a dados para o aplicativo.
Para criar o aplicativo cliente WPF
Em Gerenciador de Soluções, clique com o botão direito do mouse no nó da solução, clique Adicionar, e selecione Novo Projeto.
Em a caixa de diálogo de Novo Projeto , expanda Visual C# ou Visual Basic, selecione Janelas.
Selecione o modelo de projeto de Aplicativo WPF .
Em a caixa de Nome , digite e clique AdventureWorksSalesEditorOK.
O Visual Studio adiciona o projeto de AdventureWorksSalesEditor à solução.
No menu Data, clique em Show Data Sources.
A janela Data Sources é aberta.
Na janela Data Sources, clique em Add New Data Source.
O Data Source Configuration Wizard é aberto.
Em a página de Escolher um Tipo de Fonte de Dados do assistente, Serviço selecione e clique em Avançar.
Na caixa Adicionar serviço de referência caixa de diálogo, clique em Descubra .
O Visual Studio procura a solução atual por serviços disponíveis, e adiciona AdventureWorksService.svc à lista de serviços disponíveis na caixa de Serviços .
Em a caixa de Namespace , digite AdventureWorksService.
Em a caixa de Serviços , clique em AdventureWorksService.svc e clique em OK.
O Visual Studio baixa informações de serviço e então retorna a Assistente para Configuração de Fonte de Dados.
Em a página de Adicionar referência de serviço , clique Concluir.
O Visual Studio adiciona os nós que representam os dados retornados pelo serviço para a janela de Fontes de Dados .
Definindo a interface do usuário da janela
Adicionar vários botões à janela alterando o XAML no criador de WPF.Posteriormente em esta explicação 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
Em Gerenciador de Soluções, clique duas vezes em MainWindow.xaml.
A janela é aberta no WPF designer.
Em o modo de XAML o designer, adicione o seguinte código entre as marcas de <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>
Crie o projeto.
Criando controles associados a dados
Criar controles que exibem registros de clientes arrastando o nó de SalesOrderHeaders da janela de Fontes de Dados para o designer.
Para criar controles associados a dados
Em a janela de Fontes de Dados , clique no menu drop-down para o nó de SalesOrderHeaders e selecione Detalhes.
Expanda o nó de SalesOrderHeaders .
Para esse exemplo alguns campos não serão exibidos então clique no menu suspenso próximo dos nós e selecione Nenhum:
CreditCardApprovalCode
ModifiedDate
OnlineOrderFlag
RevisionNumber
rowguid
Esta ação impede que o Visual Studio criar controles associados a dados para esses nós na próxima etapa.Para esta explicação passo a passo, presume-se que o usuário final não precisa consultar esses dados.
De a janela de Fontes de Dados , arraste o nó de SalesOrderHeaders a linha de grade abaixo da linha que contém botões.
O Visual Studio gera XAML e código que cria um conjunto de controles associados a dados na tabela de Produto .Para obter mais informações sobre o XAML e código gerado, consulte Controles do WPF de ligação a dados em Visual Studio.
Em o designer, clique na caixa de texto ao lado do rótulo de Identificação do cliente .
Em a janela de Propriedades , selecione a caixa de seleção próxima à propriedade de IsReadOnly .
Defina a propriedade de IsReadOnly para cada uma das seguintes caixas de texto:
Número de pedido de compra
Identificação de ordem de venda
Número de pedido de venda
Carregar os dados de serviço
Use o objeto de proxy de serviço para dados de vendas de carregamento de serviço, e depois atribua os dados retornados para a fonte de dados para CollectionViewSource na janela WPF.
Para carregar os dados de serviço
Em o designer, clique duas vezes no texto que lê: MainWindow para criar o manipulador de eventos de Window_Loaded .
Substitua o manipulador de eventos pelo código a seguir.Certifique-se de que você substituir o endereço de localhost em esse código com o endereço do host local no seu 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 em registros de vendas
Adicione código que permite aos usuários para percorrer os registros de vendas usando botões < e >.
Para permitir que os usuários naveguem entre registros de vendas
Em o 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 de backButton_Click para o evento de Click .
Adicione o seguinte código ao manipulador de eventos gerado de backButton_Click :
If OrdersViewSource.View.CurrentPosition > 0 Then OrdersViewSource.View.MoveCurrentToPrevious() End If
if (ordersViewSource.View.CurrentPosition > 0) ordersViewSource.View.MoveCurrentToPrevious();
Retornar ao designer, clique duas vezes no botão >.
O Visual Studio abre o arquivo code-behind e cria um novo manipulador de eventos de nextButton_Click para o evento de Click .
Adicione o seguinte código ao manipulador de eventos gerado de nextButton_Click :
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(); }
Salvar alterações em registros de vendas
Adicione código que permite aos usuários a alterações de exibição e de salvar registros de vendas usando o botão de Salvar Alterações .
Para adicionar a capacidade de salvar alterações dos registros de vendas
Em o designer, clique duas vezes no botão de Salvar Alterações .
O Visual Studio abre o arquivo code-behind e cria um novo manipulador de eventos de saveButton_Click para o evento de Click .
Adicione o seguinte código para o manipulador de eventos 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
Compilar e executar o aplicativo para verificar que você possa exibir e atualizar registros de clientes.
Para testar o aplicativo
Em o menu de Compilar , clique em Compilar solução.Verifique se a solução compile sem erros.
Pressione CTRL + f5.
O Visual Studio inicia o projeto de AdventureWorksService sem depurada.
Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de AdventureWorksSalesEditor .
Em o menu de contexto, em Depurar, clique em Iniciar nova instância.
O aplicativo é executado.Verifique o seguinte:
As caixas de texto exibe campos de dados diferentes do primeiro registro de vendas, que tem a identificação 71774de ordem de venda.
Você pode clicar nos botões > ou < para navegar através de outros registros de vendas.
Em um dos registros de vendas, digite algum texto na caixa de Comentário , clique em Salvar Alterações.
Feche o aplicativo e em seguida, inicie o aplicativo novamente do Visual Studio.
Navegue para o registro de vendas que você modificou, e verifique que a alteração persistir após você fecha e reabre o aplicativo.
Feche o aplicativo.
Próximas etapas
Após concluir essa explicação passo a passo, você pode executar as seguintes tarefas relacionadas:
Aprender a usar a janela de Fontes de Dados no Visual Studio para associar controles WPF para outros tipos de fontes de dados.Para obter mais informações, consulte Passo a passo: Vinculação de controles WPF para um modelo de dados de entidade e Passo a passo: Vinculação de controles WPF em um Dataset.
Aprender a usar a janela de Fontes de Dados no Visual Studio para exibir os dados relacionados (isto é, dados em um relacionamento pai-filho) em controles WPF.Para mais informações, consulte Passo a passo: Exibindo dados relacionados em um aplicativo WPF.
Consulte também
Tarefas
Como: vincular controles WPF dados em Visual Studio
Passo a passo: Vinculação de controles WPF para um modelo de dados de entidade
Passo a passo: Vinculação de controles WPF em um Dataset
Conceitos
Controles do WPF de ligação a dados em Visual Studio
WPF e Silverlight Designer Overview
Visão geral de vinculação de dados