.NET

21 mai, 2009

WPF – Criando uma aplicação XBAP com LINQ – parte 01

Publicidade

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: