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 à 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:
- Standalone WPF applications – aplicações
WPF instaladas no desktop semelhantes a aplicações Windows Forms; - XAML Browser Applications (XBAPs) –
aplicações baseadas em XAML e Browser usadas para criar aplicações
internet ricas. (RIA). Não instaladas no cliente;
Existem três 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ça. 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 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 exibi-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.
Referências:
- Apresentando o WPF – Windows Presentation Foundation
- WPF – DataBinding
- WPF – Usando a vinculação de dados II
- WPF – Criando um navegador Web
- Seção LINQ do site macoratti.net : LINQ