WPF - Criando uma aplicação XBAP com LINQ


O WPF (Windows Presentation Foundation) e  o LINQ são duas novidades que se consolidaram na versão 3.5 da plataforma .NET tornando-se nativos da plataforma e oferecendo ao desenvolvedor a criação de interfaces de qualidade com código de acesso a dados mais intuitivo, robusto e amigável.

Neste artigo eu vou mostrar como podemos criar uma aplicação WPF  web (XBAPs) com acesso a dados usando os recursos do LINQ usando o Visual Studio 2008 com service pack 1. Se você não tem o Visual Studio obtenha a versão trial por 90 dias aqui: http://msdn.microsoft.com/en-us/visualc/aa700831.aspx

Uma aplicação WPF é composta de páginas ou janelas XAML (eXtensible Application Markup Language) e o código gerenciado , code-behind.

O LINQ é uma nova linguagem com suporte a consulta a dados com as mais diversas fontes de origem permitindo o acesso e a obtenção de informações através de uma sintaxe enxuta e mais intuitiva.

Podemos desenvolver basicamente dois tipos de aplicações com WPF:

Existem 3 maneiras de efetuar o deploy de uma aplicação WPF:
  • Standard Executable - É o formato mais usado onde a aplicação WPF é compilada em um executável (.exe ) padrão;
  • XAML Browser Application - Também conhecida como XBAP Application, é uma aplicação WPF especial que tem a intenção de ser hospedada em um navegador; por este motivo existem muitas restrições de seguranção. A extensão usada é .xbap;
  • XAML File - É um arquivo texto com marcação XAML. A rodar um arquivo .xaml a aplicação será iniciada no navegador. A limitação é que você não pode ter código na aplicação , somente XAML; Usa a extensão .xaml;

Criar uma aplicação WPF para web (daqui para frente aplicação XBAP ) é muito simples. Quer ver como ???

Criando uma aplicação WPF XBAP

Abra o Visual Studio 2008 e no menu File selecione New Project;

Na janela New Project selecione o Projeto Visual Basic -> Windows e em Templates WPF Browser Application informando o nome wpf_WebApp e clique em OK;

A seguir inclua o seguinte código na janela XAML no interior da tag <Grid> </Grid>:

<TextBlock Text="Minha primeirao aplicação XBAP." Background="Aqua" Foreground="DarkOrchid"></TextBlock>

Você pode também arrastar o controle TextBlock a partir da Toolbox e na janela de propriedades , na propriedade Text informar o Texto usado: Minha primeirao aplicação XBAP;

Executando a aplicação será aberta no seu navegador padrão a seguinte janela:

Bem , não é nada muito funcional , não é mesmo !!!!

Então vamos ao que interessa , vamos criar uma aplicação WPF XBAP bem simples para começar, assim todos podem acompanhar.

Vamos criar uma aplicação WPF que usa o Navegador padrão como janela e que irá acessar o banco de dados Northwind.mdf e exibir os nomes dos produtos em um controle ListBox.

Volte a janela Solution Explorer e selecione o arquivo Page1.xaml . A seguir remova o TextBlock e inclua um controle ListBox e um controle Button conforme o leiaute abaixo:

Agora vamos incluir uma referência ao LINQ to SQL no projeto. No menu Project -> Add New Item , selecione na janela Add New Item , em Templates , LINQ to SQL Classes e informe o nome Produtos.dbml e clique em Add;

Será aberto o descritor LINQ; Abra a janela Server Explorer e selecione uma conexão com o banco de dados Northwind.mdf;

Expanda as tabelas e selecione a tabela Products e a arraste para a janela do Descritor OR/M LINQ conforme figura abaixo;

Uma das grandes novidades na nova versão da plataforma .NET é o LINQ , e, dentre as variações do LINQ  o LINQ To SQL. Para usar o LINQ To SQL em suas aplicações basta incluir uma referência usando o template LINQ To SQL classes. Fazendo isso você terá acesso ao Descritor Objeto Relacional ou Object Relational Designer (O/R Designer).

O Descritor Objeto Relacional - Object Relational Designer (O/R Designer) - fornece uma interface visual para criar e editar classes  LINQ to SQL , classes das entidades - entity classes-  que são baseadas em objetos do banco de dados.

O descritor O/R é usado para criar um modelo de objetos na aplicação que efetua o mapeamento para os objetos do banco de dados gerando um DataContext fortemente tipado que é usado para enviar e receber dados entre as classes das entidades e o banco de dados; além disso o descritor O/R também permite efetuar o mapeamento de stored procedures e funções para o métodos do DataContext com o intuito de retornar e popular as classes das entidades provendo ainda a habilidade de desenhar relacionamentos herdados entre as classes das entidades.

Abaixo temos o Descritor O/RM exibindo a classe Product mapeada para tabela Products do banco de dados;

Agora volte para a janela Solution Explorer e selecione o arquivo Page1.xaml. Clique duas vezes no controle Button e inclua o seguinte código no evento Click:

Private Sub btnExibirProdutos_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnExibirProdutos.Click

     carregaLista()

End Sub

Neste código apenas invocamos a rotina carregaLista() quando o usuário clicar no botão de comando da página:

A seguir temos o código da rotina carregaLista();

Private Sub carregaLista()

Dim db As New ProdutosDataContext

Me.ListBox1.ItemsSource = From p In db.Products.ToList Order By p.ProductName

Me.ListBox1.DisplayMemberPath = "ProductName"

End Sub

No código criamos uma instância da classe DataContext para a tabela Produtos e em seguida usamos uma consulta LINQ para selecionar os nomes dos produtos e exibí-los no ListBox da página;

A classe DataContext é uma classe LINQ to SQL que atua como uma ponte entre o banco de dados SQL Server e as classes das entidades LINQ To SQL mapeadas para o banco de dados. Ela contém a informação e os métodos para efetuar a conexão com o banco de dados e manipular os dados.

Essa classe possui diversos métodos que você pode chamar , como o método SubmitChanges que envia as atualizações das classes LINQ To SQL para o banco de dados.

Além disso você pode criar métodos adicionais na classe DataContext para mapear stored procedures e funções de forma que executando os métodos criados as stored procedures e as funções que foram mapeadas pela classe DataContext serão executadas.

O LINQ To SQL trata as stored procedures e funções da mesma forma, sendo que ambas são mapeadas para as classes das entidades usando o mesmo StoredProcedureAttribute.

Existem dois tipos distintos de métodos DataContext (que mapeiam para stored procedures e funções) que você pode criar e incluir no painel de métodos do  Object Relational Designer (O/R Designer) :

  • Métodos DataContext que chamam stored procedures e funções e retornam um conjunto de resultados;
  • Métodos DataContext que realizam operações de Insert, Update e Delete para uma classe de entidade específica;

Antes de testar a nossa aplicação devemos efetuar o seguinte ajuste na configuração da mesma. Clique duas vezes sobre My Project e na guia Security  marque a opção : This is a full trust application, de forma a contornar o erro que irá ocorrer se não marcarmos esta opção;

Executando o projeto e clicando o botão de comando iremos obter:

E assim acabamos criando a nossa primeira aplicação WPF do tipo XBAP acessando dados via LINQ to SQL.  

Pegue o projeto completo aqui : wpf_WebApp.zip

Continuando este artigo vamos mostrar como funciona o modelo de distribuição de uma aplicação WPF do tipo XBAP.

acompanhe a continuação neste link:  WPF - Criando uma aplicação XBAP com LINQ II ...

Referências:


José Carlos Macoratti