37
WPF - Usando a vinculação de dados, conceitos e prática Há algum tempo atrás publiquei um artigo introdutório sobre o WPF - Windows Presentation Foundation - e depois me calei a respeito. De lá para cá a ferramenta amadureceu e eu fiquei de publicar mais sobre a vinculação de dados com WPF. Uma aplicação WPF é composta por um conjunto de páginas ou janelas XAML, e o seu respectivo código. O WPF é uma nova tecnologia com foco na apresentação gráfica permitindo a criação de interfaces visuais mais sofisticadas usando recursos de última geração, uma alternativa ao Windows Forms. (Eu disse alternativa não substituição embora creio que o Windows Forms já deu o que tinha que dar ) . Nota: Para criar interfaces ricas de alta qualidade usando WPF você vai precisar conhecer muito bem XAML e também ser um bom design gráfico. Além disso vai precisar conhecer outras ferramentas como o SilverLight e o Expression Blend da Microsoft para poder estender os recursos oferecidos pelo Visual Studio. Nas apresentações sobre WPF são mostrados exemplos de cubos e paletas de cores mas ninguém usa isso no dia a dia. Na prática se trabalha com aplicações com acesso a dados o que requer também o conhecimento do databinding. Recursos e objetivos do WPF:( http://msdn.microsoft.com/pt-br/library/cc564903.aspx ) O WPF veio para integrar Vídeo, Animação, Efeitos em 3D e texto, tanto Web como no desktop; O WPF usa o processador da placa de vídeo para criar gráficos e não mais o processador da CPU; O XAML foi criado para facilitar que outras ferramentas criem conteúdo WPF. Você pode usar o XAML ou codificar via código de programa no code-behind; Não esta baseado em pixel. (Os controles WPF não se restringem à resolução); É baseado em composição. (No WPF você pode inserir controles dentro de controles, compondo um novo); A aparência foi separada da lógica. Quando criamos um controle em WPF ele não tem aparência e sim eventos e propriedades de comportamento. A aparência de um controle pode ser determinada através de Templates e um template pode ser aplicado a diversos controles.

apostila WPF

Embed Size (px)

DESCRIPTION

apostila WPF

Citation preview

WPF - Usando a vinculao de dados, conceitos e prtica

H algum tempo atrs publiquei um artigo introdutrio sobre o WPF - Windows Presentation Foundation - e depois me calei a respeito. De l para c a ferramenta amadureceu e eu fiquei de publicar mais sobre a vinculao de dados com WPF. Uma aplicao WPF composta por um conjunto de pginas ou janelas XAML, e o seu respectivo cdigo.O WPF uma nova tecnologia com foco na apresentao grfica permitindo a criao de interfaces visuais mais sofisticadas usando recursos de ltima gerao, uma alternativa ao Windows Forms. (Eu disse alternativa no substituio embora creio que o Windows Forms j deu o que tinha que dar) .Nota: Para criar interfaces ricas de alta qualidade usando WPF voc vai precisar conhecer muito bem XAML e tambm ser um bom design grfico. Alm disso vai precisar conhecer outras ferramentas como o SilverLight e o Expression Blend da Microsoft para poder estender os recursos oferecidos pelo Visual Studio. Nas apresentaes sobre WPF so mostrados exemplos de cubos e paletas de cores mas ningum usa isso no dia a dia. Na prtica se trabalha com aplicaes com acesso a dados o que requer tambm o conhecimento do databinding. Recursos e objetivos do WPF:( http://msdn.microsoft.com/pt-br/library/cc564903.aspx) O WPF veio para integrar Vdeo, Animao, Efeitos em 3D e texto, tanto Web como no desktop;

O WPF usa o processador da placa de vdeo para criar grficos e no mais o processador da CPU;

O XAML foi criado para facilitar que outras ferramentas criem contedo WPF. Voc pode usar o XAML ou codificar via cdigo de programa no code-behind;

No esta baseado em pixel. (Os controles WPF no se restringem resoluo);

baseado em composio. (No WPF voc pode inserir controles dentro de controles, compondo um novo);

A aparncia foi separada da lgica. Quando criamos um controle em WPF ele no tem aparncia e sim eventos e propriedades de comportamento. A aparncia de um controle pode ser determinada atravs de Templates e um template pode ser aplicado a diversos controles. Flexibilidade da interface, que pode ser independente do cdigo: podemos ter duas apresentaes completamente diferentes compartilhando o mesmo comportamento;

Leva para o desktop o conceito j existente na Web de separao entre o design e o cdigo, permitindo que a interface seja criada por um designer e o cdigo por um programador especializado, de maneira independente;

De forma geral um programa WPF composto por duas partes bsicas : Arquivo XML chamado XAML (eXtended Aplication Markup Language, a pronncia zmel) - que um subtipo do XML e contm as diretrizes da interface; Podemos criar praticamente toda a interface e do seu comportamento sem usar cdigo de programa, apenas efetuando declaraes no XAML

Cdigo para .NET (que pode ser escrito em qualquer linguagem compatvel, VB.net, C#, etc).

O arquivo XAML , como um bom arquivo XML apresenta as seguintes caractersticas:- Tem um controle raiz que contm todos os outros;- Esta ligado a uma classe no cdigo via propriedade x:Class do elemento raiz;- Os elementos so definidos usando tags e ;- Os elementos podem conter atributos;Ento na prtica podemos criar 3 tipos de aplicaes com WPF : Aplicaes desktop ou standalones que rodam em janelas do Windows como os Windows Forms; Aplicaes web que rodam no navegador conhecidas como aplicaes XBAPs (XAML Browser Applications); Aplicaes que usam o SilverLIght e podem ser executadas em qualquer plataforma (basta instalar o SilverLight);Neste artigo eu vou mostrar como criar uma aplicao WPF usando a vinculao de dados onde irei mostrar como acessar e efetuar as tarefas bsicas de manuteno de dados (CRUD); as operaes para incluir, excluir, alterar, consultar e navegar nos dados. Eu no vou portanto criar um design grfico elaborado para interface , o que seria um dos motivos para usar o WPF, vou mostrar os conceitos para que voc possa efetuar a vinculao de dados usando WPF.Uma pequena introduo sobre a vinculao de dados (DataBinding)O DataBinding no WPF fornece uma forma simples e consistente para as aplicaes de apresentar e interagir com dados. OS elementos podem ser vinculados aos dados a partir de uma grande variedade de fontes de dados na forma de objetos CLR e XML. A WPF fornece controles (ContentControls) como Button e controles de itens (ItemsControls) como ListBox e ListView que possuem funcionalidades que permitem uma flexvel customizao de estilo de uma coleo de itens ou de um simples item, alm de permitir a ordenao, o filtro e agrupamento de vises.O DataBinding do WPF possui muitas vantagens sobre o modelo tradicional pois inclui uma grande variedade de propriedades com suporte a vinculao de dados, representao grfica e uma separao lgica da lgica de negcio da interface.A vinculao de dados o processo que estabelece uma conexo entre o aplicativo e lgica do negcio. Se a associao possui configuraes corretas e os dados fornecem notificaes adequadas, ento, quando os dados mudam de valor, os elementos que so associados aos dados refletem as mudanas automaticamente. A vinculao de dados tambm pode significar que se uma representao externa de dados em um elemento alterada, ento os dados relacionados podem ser automaticamente atualizados para refletir a mudana. Por exemplo, se o usurio edita o valor em um elemento TexBox, o valor do dado relacionado na fonte de dados automaticamente atualizado para refletir a alterao. Um uso tpico de vinculao de dados colocar o servidor ou a configurao local dos dados em formulrios ou outros controles. No WPF esse conceito expandido para incluir a vinculao de uma ampla variedade de propriedades para uma variedade de fontes de dados. No WPF, as propriedades de dependncia dos elementos podem ser vinculados a objetos (incluindo objetos ou associados com os servios da Web e propriedades da Web) e aos dados. Independente de qual elemento voc est associando e a natureza de sua fonte de dados, cada associao segue o modelo ilustrado na seguinte figura:

Como ilustrado pela figura acima, a vinculao de dados essencialmente a ponte entre a ligao de destino e a sua ligao de origem. A figura demonstra os seguintes conceitos da vinculao de dados: Em geral, cada ligao possui quatro componentes: 1. Um objeto de vinculao de destino (binding target);2. Uma propriedade de destino (target property);3. Uma vinculao de origem (binding source); 4. Um caminho para o valor de vinculao de origem usar;Por exemplo, se voc deseja vincular o contedo de um TextBox para a propriedade Name um objeto Funcionrio, o objeto de destino o TextBox a propriedade de destino a propriedade Text, o valor a ser usado Name (Nome) e o objeto de origem objeto Funcionrio.A propriedade de destino deve ser uma propriedade de dependncia. A maioria das propriedades UIElement (a classe base da WPF para construo e representao de elementos) so propriedades de dependncia e a maioria das propriedades de dependncia , exceto aquelas somente leitura, do suporte a vinculao de dados por padro. Embora no especificado na figura, deve ser observado que o objeto de vinculao de origem no restrito a ser um objeto CLR. A WPF suporta a associao de dados no formulrio de objetos CLR e XML .Afinal, na WPF o que destino e que fonte ?Na WPF , voc usa o data binding para estabelecer a conexo entre as propriedades de dois objetos. Neste relacionamento , um objeto referenciado como sendo a fonte e o outro como sendo o destino. Em um cenrio tpico, seu objeto fonte o objeto que contm os dados e o seu objeto fonte o controle que pretende exibir os dados.

A direo do fluxo de dadosO fluxo de dados de uma vinculao pode ir a partir de Ligao de destino para a Ligao de origem;Por exemplo, o valor de origem alterado quando um usurio edita o valor de um TexBox e/ou a partir de Ligao de origem para o Ligao de destino;Por exemplo, o seu TextBox obtm e exibe o contedo atualizado com as alteraes na ligao de origem se a origem de ligao fornece as notificaes adequadas.Voc pode querer que sua aplicao permita aos usurios modificar os dados e propag-los de volta para o objeto fonte; ou voc no quer permitir que usurios atualizem a fonte de dados. Voc pode controlar isso definindo a propriedade Mode() do seu objeto vinculado. A seguinte figura ilustra os diferentes tipos de fluxo de dados:

O WPF oferece as seguintes possibilidades de fluxo de dados que so definidas com o Binding.Mode: OneWay: Ideal para situao de "somente-leitura". O que alterado na interface destino(UI) no repassado para o a fonte de origem. TwoWay: Tanto a origem como o destino (no caso a interface) se atualizam. Ideal para edies. Caso a origem sofra alterao por alguma rotina interna do sistema, e no pela interveno do usurio junto interface destino UI), a interface ser atualizada. OneWayToSource: o inverso do OneWay. O que voc alterar a propriedade destino a propriedade origem alterada. Ou seja uma alterao na interface se reflete na origem de dados;

OnTime: O valor contido na origem utilizado para inicializar a interface destino(UI). Caso a origem sofra alguma alterao em seu contedo, a interface (UI) no atualizada; mas se a origem for alterada, por exemplo com uma nova instncia sendo passada, o destino reflete a alterao. O modo de vinculao TwoWay ou OneWayToSource fica monitorando as alteraes na propriedade destino e ento as propaga para a origem. Assim voc pode editar o texto em um TextBox para alterar o valor a origem correspondente.Criando uma aplicao WPF com vinculao de dadosAgora vamos a prtica, criar uma aplicao WPF desktop que execute em janela Windows Forms com vinculao de dados e recursos de alterar, incluir, excluir , e selecionar e navegar pelos dados.Podemos usar o Visual Basic 2008 Express Edition ou o Visual Studio 2008 (ambos com service pack1) para criar uma aplicao WPF. Vou usar o Visual Studio 2008 (Voc pode baixar a verso trial do VS 2008 aqui ).Abra o VS 2008 e no menu File escolha New Project e em Project Types selecione Visual Basic -> Windows e na janela Templates marque WPF Application e informe o nome wpf_Dados e clique em OK;

Vamos agora definir uma fonte de dados selecionando o menu Data-> Add New Data Source;Na janela do assistente selecione DataBase e clique em Next>;Na prxima janela selecione uma conexo com o banco de dados Northwind.mdf e clique em Next>;Nota: Se voc no possuir a conexo criada clique no boto New Connection... e defina a conexo para o Northwind.mdf

Vamos aceitar e salvar a string de conexo e clicar no boto Next>;Vamos selecionar a tabela Categories e clicar no boto Finish;

Desta forma j temos o dataset NortwindDataSet criado em nossa aplicao.Vamos agora definir o leiaute da aplicao WPF.Na janela Solution Explorer selecione Window1.xaml e tenha o cuidado de habilitar a partir do menu View _> ToolBox e View -> Other Windows -> Document Outline;De forma que voc visualize o seguinte leiaute da aplicao. Note que a janela de propriedades um pouco diferente da usada em uma aplicao Windows Forms;

Observe que temos duas vises: a do designer e a do arquivo XAML e que por padro o formulrio WPF apresenta a classe Window1 e o componente Grid que define o leiaute.O que o WPF oferece?Essencialmente temos os seguintes controles de leiautes disponibilizados: Canvas, Stackpanel, Wrappanel, Dockpanel, GridCanvas - Este um dos controles de layout mais fceis de se utilizar. Igual aos formulrios Windows Forms ou VCL, nele podemos posicionar os controle utilizando as coordenadas X,Y. StackPanel - fcil de ser utilizado, nele os controles so empilhados verticalmente ou horizontalmente. Isso pode ser feito pela propriedade Orientation. Wrappanel - Distribui os controles que esto contidos nele. Dockpanel - muito til e pode servir como leiaute base para qualquer janela WPF. Atravs dele podemos construir os mais variados leiautes, posicionando por exemplo um menu ao topo, uma rea livre direita e at mesmo um outro controle de layout esquerda. possvel aninhar controles de layout. Cada controle que inserido em um dockpanel pode ser alinhado atravs da propriedade DockPanel.Dock.O Dockpanel tambm oferece uma propriedade muito interessante, a LastChildFill, que faz com que o ltimo controle inserido nele preencha todo o espao restante. Utilizei essa propriedade para fazer o Scrollbox preencher todo o espao disponvel da janela Grid - O Grid semelhante a uma tabela, com ele definimos colunas e linhas, e dentro delas inserimos os controles. (Veremos sua utilizao no exemplo)

Para definir o leiaute vamos criar uma linha (Row) e duas colunas(Column). Para fazer isso voc apenas posiciona o mouse no Grid onde deseja criar a diviso e clica ajustando o tamanho;Note que na ToolBox temos os controles WPF que poderemos arrastar e soltar no designer. Note que temos uma quantidade de menor de controles do que nas aplicaes Windows Forms;Vamos ento arrastar e soltar oito Button no Designer conforme o leiaute abaixo e definir a sua propriedade Name e Content (A propriedade Content idntica a propriedade Text dos controles Windows Forms) conforme a seguir:1. Name = btnNovo ; Content = Novo2. Name = btnExcluir ; Content = Excluir3. Name = btnCancelar ; Content = Cancelar4. Name = btnSalvar ; Content = Salvar5. Name = btnPrimeiro ; Content = ||

Observe que quando voc seleciona um controle surgem setas e indicaes de tamanho e altura do mesmo:As setas servem para alterar o tamanho e tambm para ancorar o controle. Para isso arraste o mouse sobre a posio da seta e quando o cone de uma mo aparecer clique na seta para ancorar o controle.

Note tambm que a representao esta sendo gerada no arquivo XAML.

Vamos incluir dois controles StackPanel em cada uma das colunas criadas no Grid e expandir o controle at o tamanho mximo das colunas;

Em seguida vamos incluir a partir da ToolBox, 3 controles Label no primeiro StackPanel, e 3 controles TextBox no segundo StackPanel e definir a sua propriedade Width como Auto de forma a obter o seguinte resultado:

Agora vamos definir a propriedade Content do controle Label para indicar o nome de cada um dos campos que vamos exibir ou seja: Cdigo, Nome, Descrio.Em cada um dos controles TextBox vamos efetua as seguintes definies: Name = txtCategoriaID : ReadOnly = True Name = txtCategoriaNome Name = txtCategoriaDescricaoNote que voc pode acompanhar na janela Document Outline a hierarquia de controles no WPF;

Agora temos que efetuar a vinculao de cada um dos controles TextBox com os dados. Para isso vamos efetuar a definio no arquivo XAML usando notao especial para o binding;

Observe que definimos os nomes dos campos com os quais desejamos vincular os controles e no caso do TextBox txtCategoryID temos a definio do Mode como OneWay pois o campo somente-leitura.Text="{Binding Path=nomedocampo, Mode=modofluxodados }"Agora vamos definir o cdigo para carregar os dados no code-behind. Clique com o boto direito sobre o designer e selecione View Code;A seguir defina o seguinte cdigo :Nota: O evento para carga do arquivo XAML o evento Loaded.

O cdigo relativo a definio do TableAdapter e TableAdapterManager ns j conhecemos. Os TableAdapters fornecem a comunicao entre sua aplicao e uma fonte de dados, ou seja, um TableAdapter efetua a conexo com uma fonte de dados, executa instrues SQL ou procedimentos armazenados e retorna um novo conjunto de dados (DataTable) preenchido com os dados retornados ou preenche um DataTable j existente com os dados retornados. Os TableAdapters tambm so usados para enviar dados atualizados de sua aplicao de volta a fonte de dados. Voc pode pensar em um TableAdapter como sendo um DataAdapter com um objeto connection embutido e com a caracterstica de conter mltiplas consultas. Cada consulta includa a um TableAdapter exposta como um mtodo pblico que chamado como qualquer outro mtodo ou funo em um objeto.Alm das funcionalidades padro de um DataAdapter , os TableAdapters fornecem mtodos tipados adicionais que encapsulam consultas que compartilham um esquema comum com o DataTable tipado associado; ou seja, voc pode ter tantas consultas quando voc desejar em um TableAdapter contanto que elas retornam dados que se conformam com o mesmo esquema.

O TableAdapterManager um novo componente presente no VS 2008 que atua sobre datasets tipados e TableAdapters e permite a atualizao de dados em tabelas relacionadas(Atualizao hierrquica) de uma forma mais fcil. Na verso anterior era necessrio a incluso de cdigo para realizar esta tarefa corretamente.A atualizao hierrquica o processo de atualizao dos dados modificados em tabelas relacionadas em um dataset tipado pela utilizao do novo componente TableAdapterManager.O TableAdapterManager usa o relacionamento da chave primria entre as tabelas para determinar corretamente a ordem na qual deve enviar os Inserts, Updates e Deletes do DataSet para o banco de dados sem violar as restries da chave-primria (integridade referencial) no banco de dados.Agora note a propriedade DataContext a qual atribumos a nossa fonte de dados. O DataContext uma propriedade existente em qualquer FrameWorkElement e que permite que os controles herdem, de seu parent, a fonte de dados. Um DataContext pode ser ligado diretamente a um objeto CLR ou a um DataSource Provider. No nosso exemplo temos uma Window e esse Window possui alguns TextBox inseridos nele. Ao se definir que o o DataContext do Window por exemplo a classe Categories, no mais necessrio indicar o DataContext dos demais TextBox. Eles, por estarem dentro da hierarquia do Window, entendem que devem herdar o DataContext de Window, caso outro no seja especificado. Existem muitas formas de especificar a sua fonte de vinculao de dados, ou seja, definir qual a origem dos seus dados. A forma mais simples instanciar o objeto origem como um recurso XAML e ento definir a propriedade Source da vinculao para o recurso.Usar a propriedade Source a forma mais simples. Porm, se mltiplas propriedades esto vinculadas a mesma origem, considera utilizar a propriedade DataContext..

A propriedade DataContext fornece uma forma conveniente de estabelecer um escopo de dados quando voc tem muitos controles e voc quer vincular todos a mesma origem.

Dessa forma j podemos executar a aplicao que veremos o databinding em ao exibindo os dados da tabela Categorias no TextBox;

Agora temos que permitir a navegao pelos dados. (Lembra do BindingNavigator ? )No WPF podemos fazer a mesma coisa usando a classe CollectionView.A classe CollectionView representa uma viso para agrupamento, ordenao, filtragem e navegao de uma coleo de dados.Para criar uma viso para uma coleo que implementa IEnumeralbe, crie um objeto CollectionViewSource, inclua a sua coleo a propriedade Source e obtenha a viso da coleo atravs da propriedade View.Voc pode pensar na CollectionView como uma camada na parte superior de uma vinculao de origem que permite que voc navegue e exiba a coleo com base na classificao, filtro e agrupamento de consultas, tudo sem precisar manipular a coleo de origem subjacentes. Se a coleo de origem implementa a interface INotifyCollectionChanged, as alteraes que disparam o evento CollectionChanged so propagadas para os vises.Nas aplicaes WPF todas as colees tem uma viso de coleo padro associada. Em vez trabalhar diretamente com a coleo, o mecanismo de ligao sempre acessa a coleo atravs de exibio associada. Para obter o modo de exibio padro use o mtodo CollectionViewSource.GetDefaultView.Vamos ento implementar esta funcionalidade em nosso cdigo:

Agora s temos que implementar nos eventos dos controles Button para navegao usando os mtodos para navegao oferecidos pela CollectionView.Clicando duas vezes no boto de navegao podemos implementar o cdigo para navegao com a ajuda do intellissense:

A seguir o cdigo para cada um dos botes:Private Sub btnPrimeiro_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnPrimeiro.Click Me.view.MoveCurrentToFirst()End SubPrivate Sub btnAnterior_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnAnterior.Click If view.CurrentPosition > 0 Then Me.view.MoveCurrentToPrevious() End IfEnd Sub

Private Sub btnProximo_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnProximo.Click If Me.view.CurrentPosition < Me.view.Count - 1 Then Me.view.MoveCurrentToNext() End IfEnd Sub

Private Sub btnUltimo_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnUltimo.Click Me.view.MoveCurrentToLast()End Sub

Note que a lgica a mesma usada para navegao com o BindingNavigator pois temos mtodos parecidos, vejamos os principais: CurrentItem - Obtm o item atual na viso; CurrentPosition - A propriedade obtm a posio ordinal do item atual(CurrentItem) da viso; MoveCurrentToPrevious - Define o item anterior ao CurrentItem na viso como o item atual(CurrentItem); MoveCurrentToNext - Define o item posterior ao CurrentItem na viso como o item atual(CurrentItem); MoveCurrentToLast - define o ltimo item na viso como o item atual (CurrentItem); MoveCurrentToFirst - define o primeiro item na viso como o item atual (CurrentItem); Count - Propriedade que retorna o nmero de registros na viso. IsCurrentBeforeFirst - indica se o ponteiro do registro atual esta posicionado no inicio da coleo; IsCurrentAfterLast - indica se o ponteiro do registro atual esta posicionado no fim da coleo;Agora j podemos navegar usando os botes.

Na continuao deste artigo vou mostrar a implementao do cdigo para as operaes de Incluir, alterar e excluir dados. Acompanhe a continuao em : WPF - Usando a vinculao de dados, conceitos e prtica II Eu sei apenas VB .NET mas eu gosto... Referencias: http://msdn.microsoft.com/pt-br/library/ms752347.aspx VB 2008 - TableAdapterManager Executando consultas em TableAdapters Aplicaes WPF The Official Microsoft WPF and Windows Forms Site

Jos Carlos MacorattiWPF - Usando a vinculao de dados, conceitos e prtica II

Na primeira parte deste artigo eu criei uma aplicao WPF usando o VS 2008 com acesso a dados mostrando como usar os alguns controles do WPF e efetuar o databinding. Parei na navegao pelos registros onde usei a classe CollectionView. Neste artigo eu vou mostrar como realizar a operaes CRUD (Create,Read,Update, Delete) na aplicao WPF. Veja abaixo o resultado final obtido com nossa aplicao na primeira parte do artigo.

O que temos que fazer agora mostrar como efetuar as operaes para incluir , excluir , cancelar e salvar os registros da tabela Categories no banco de dados. Vamos comear com a incluso de um novo registro na tabela. Para isso inclua o seguinte cdigo no evento Click do boto Novo:Private Sub btnNovo_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnNovo.ClickDim linha = Me.categoriaDados.Categories.NewCategoriesRowlinha.CategoryName = "[Novo]"Me.categoriaDados.Categories.AddCategoriesRow(linha)Me.view.MoveCurrentToLast()End Sub

Aqui no h segredo algum, Estamos incluindo um novo registro no dataset tipado usando a instncia da classe CategoriesRow e atribuindo uma nova linha para em seguida preencher com os dados que viro formulrio e no final inclumos a linha na coleo de linhas. Estamos movendo o ponteiro para o ltimo registro que ser a linha includa.Para excluir um registro temos o seguinte cdigo no evento Click do boto Excluir:Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnExcluir.ClickIf Me.view.CurrentPosition > -1 Then If MessageBox.Show("Voc deseja excluir estas informaes ? ", Me.Title, MessageBoxButton.YesNo) = MessageBoxResult.Yes Then Dim linha = CType(Me.view.CurrentItem, System.Data.DataRowView).Row linha.Delete() MsgBox("Os dados foram excludos.") End IfEnd IfEnd Sub

Neste cdigo verificamos se a linha a ser excluda uma linha vlida e exibimos uma mensagem para confirmao do usurio. Em seguida fazemos uma coero forada (cast) da linha atual (view.CurrentItem) para System.Data.DataRowView e em seguida usamos o mtodo Delete para excluir a linha.Vejamos agora o cdigo para cancelar uma operao que ser includo no evento Click do boto Cancelar:Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnCancelar.Click

If Me.categoriaDados.HasChanges Then If MessageBox.Show("Voc deseja cancelar as alteraes feitas ? ", Me.Title, MessageBoxButton.YesNo) = MessageBoxResult.Yes Then Me.categoriaDados.RejectChanges() End IfEnd IfEnd Sub

Primeiro verificamos se ocorreu uma alterao no DataSet usando o mtodo HasChanges, este mtodo retorna um valor indicando se o DataSet sofreu alterao pela incluso , excluso ou modificao das linhas.Em caso positivo usamos o mtodo RejectChanges() do DataSet tipado que desfaz as mudanas feitas no dataset desde que ele foi criado ou deste a ltima vez que o mtodo AcceptChanges foi chamado.Para concluir temos o cdigo para salvar os dados includo no evento Click do boto Salvar:Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnSalvar.ClickTry If Me.categoriaDados.HasChanges Then If Me.taManager.UpdateAll(Me.categoriaDados) > 0 Then MsgBox("Dados salvos com sucesso !") End If End IfCatch ex As Exception MsgBox(ex.ToString)End TryEnd Sub

Aqui novamente verificamos se houve alterao no dataset checando o mtodo HasChanges para em seguida usar o mtodo UpdateAll do TableAdapterManager.O TableAdapterManager um novo componente presente no VS 2008 que atua sobre datasets tipados e TableAdapters e permite a atualizao de dados em tabelas relacionadas(Atualizao hierrquica) de uma forma mais fcil. Na verso anterior era necessrio a incluso de cdigo para realizar esta tarefa corretamente.A atualizao hierrquica o processo de atualizao dos dados modificados em tabelas relacionadas em um dataset tipado pela utilizao do novo componente TableAdapterManager.O TableAdapterManager usa o relacionamento da chave primria entre as tabelas para determinar corretamente a ordem na qual deve enviar os Inserts, Updates e Deletes do DataSet para o banco de dados sem violar as restries da chave-primria (integridade referencial) no banco de dados.O TableAdapterManager facilita a atualizao de mltiplas tabelas e reduz o trabalho usando o mtodo UpdateAll.Salvar dados de tabelas relacionados uma tarefa mais complexa pois os comandos para incluso, atualizao e excluso para cada tabela relacionada tem que ser executadas em um ordem especfica para evitar a violao na integridade referencial definida no banco de dados.A classe TableAdapterManager gerada quando voc cria um dataset tipado em um projeto. Na verdade a propriedade Hierarchical Update do dataset que determina se um TableAdpaterManager ser criado ou no. Se o valor da propriedade for definido como True ele ser criado e o cdigo para atualizar atualizao hierrquica em tabelas relacionadas gerado tambm.Para encerrar quero chamar a sua ateno para a declarao dos eventos Click nos botes de comando da nossa aplicao. Todos eles tem seguinte sintaxe:(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) -> WPFSe voc comparar com o mesmo evento de um boto de uma aplicao Windows Forms ver que a sintaxe : (ByVal sender As System.Object, ByVal e As System.EventArgs) -> WIndows FormsA diferena fica por conta da classe RoutedEventArgs que contm informaes do estado e dados de evento associados com um evento roteado, e especifica do WPF.Com isso encerramos a nossa aplicao WPF agora com todos os recursos prontos: a navegao e as operaes CRUD.Executando o projeto e realizando uma operao de incluir um novo registro , clicando no boto Novo informando os dados e clicando no boto Salvar, teremos o resultado abaixo:

Pegue o projeto completo aqui : wpf_Dados.zipEu sei apenas WPF mas eu gosto... Referencias: http://msdn.microsoft.com/pt-br/library/ms752347.aspx VB 2008 - TableAdapterManager Executando consultas em TableAdapters Aplicaes WPF The Official Microsoft WPF and Windows Forms Site VB 2008 - TableAdapterManager WPF - Apresentando o DataBinding

Jos Carlos MacorattiVB 2008 - Minha primeira aplicao WPF

WPF ou Windows Presentation Foundation uma parte do .NET Framework 3.0 sendo composto por um conjunto de classes que expe suas funcionalidades.Nota: Leia o meu artigo: .NET - Apresentando o .NET Framework 3.0 - O .NET Framework 3.0 est disponvel para o Windows Vista, o Windows Server 2003 e o Windows XP;- A verso 3.0 do .NET Framework baseada na verso 2.0;- No houve nenhuma alterao na verso 2.0 do .NET Framework e os aplicativos feitos nesta verso continuam a funcionar sem necessidade de ajustes;- O .NET Framework 3.0 possui atualmente mais 4 novos frameworks internos : Windows Workflow Foundation, Windows Communication Foundation, Windows CardSpace e Windows Presentation Foundation

De forma geral um programa WPF composto por duas partes bsicas : Arquivo XML chamado XAML (eXtended Aplication Markup Language, a pronncia zmel) - contm as diretrizes da interface Cdigo para .NET (que pode ser escrito em qualquer linguagem compatvel, VB.net, C#, etc).Abrindo o Visual Basic 2008 Express Beta 2 iremos ver a seguinte tela:

Clicando em Create Project... ou no menu File New Project teremos a janela New Project tambm mostrada acima onde notamos dois novos templates : WPF Application e WPF Browser Application.Clicando no boto OK vermos a interface do projeto conforme abaixo:Como todo bom arquivo XML que se preza um arquivo XAML deve possuir: Um n raiz ou root por arquivo; A vinculao com uma classe no cdigo. Na figura acima temos x:Class="Windows1" Tags ( para definio de elementos; Observe que na figura acima temos duas vises: A Design e a XAML , clicando sobre as setas (Swap Panes) podemos alternar entre as mesmas; No modo de viso Design voc tem um controle que permite controlar o tamanho da janela Window1.Se visualizarmos a ToolBox iremos ver dois grupos de controles : Common e Controls

Como primeira aplicao vamos arrastar e soltar um controle Button e um controle ListBox na janela Window1 conforme figura abaixo:

Vamos alterar o texto exibido no boto. Aqui encontramos a primeira mudana em relao ao controle Button das verses anteriores. No temos mais a propriedade Text no seu lugar entrou a propriedade Context:

Se examinarmos a janela de propriedade dos controles iremos notar mais diferenas para a verso anterior. No caso do controle ListBox no existe mais a propriedade DataSource no seu lugar temos a propriedade DataContext.No evento Click do controle Button eu vou copiar e colar um cdigo que faz o acesso ao banco de dados Northwind.mdb e exibe alguns dados da tabela Categories.Defina os seguintes imports no formulrio Window1:Imports System.Data.OleDbImports System.DataA seguir inclua o cdigo abaixo no formulrio WIndow1:

Acima temos a figura do programa exibindo os dados aps a sua execuo. Como nossa primeira aplicao no entrei em detalhes do DataBinding do WPF (DataTemplate, ElementName, Windows.Resources, etc...)At que para um incio comeamos bem. Acessamos um banco de dados e exibimos informaes de uma tabela em uma aplicao WPF. apenas a ponta do iceberg. Aguarde mais artigos sobre as novidades das ferramentas do Visual Studio 2008 e verses Express...At o prximo artigo ... Referncias? WPF - Apresentando o DataBinding- WPF - Usando a vinculao de dados : conceitos e prtica I

Jos Carlos MacorattiWPF - Apresentando o DataBinding

Os desenvolvedores para a plataforma Windows tem usado praticamente a mesma tecnologia de exibio por mais de 15 anos. Uma aplicao Windows bsica se baseia em dois recursos muito usados do sistema operacional Windows para criar a interface com o usurio: User32 - fornece a aparncia familiar dos elementos Windows como janelas, botes, caixas de texto, etc.; GDI/GDI+ - fornece o suporte ao desenho para renderizar formas, texto e imagens ao custo da tradicional complexidade e desempenho;Ao longo dos anos essas duas tecnologias tm sido refinadas e as APIs que o desenvolvedores usam para interagir com elas tem mudado de forma dramtica; mas se voc esta criando uma aplicao com a plataforma .NET e WIndows Forms, ou ainda esta usando VB6, nos bastidores, os mesmos recursos do sistema operacional Windows esto sendo usados.A tecnologia WPF veio para mudar este cenrio ao trazer novos recursos e usar uma nova forma de trabalho que trabalha diretamente como a tecnologia DirectX.O Microsoft Windows Presentation Foundation - WPF introduz uma nova maneira de criar interfaces com o usurio em clientes ricos oferecendo recursos grficos e uma nova linguagem de marcao chamada XAML que baseada em XML com um novo modelo de desenvolvimento que inclui um rico modelo para a ligao de dados.O WPF efetua a separao do design da interface do usurio e do cdigo de uma maneira parecida com ASP .NET onde temos em um arquivo a linguagem de marcao e em outro o cdigo, o arquivo code-behind.Um dos recursos mais poderosos apresentado pelo WPF o databinding que permite efetuar a ligao com dados de diversas fontes de dados sem ter que utilizar cdigo, permitindo gerenciar a execuo e edio de dados complexos. isso mesmo, se voc odeia codificar, vai amar o WPF, pois voc pode atravs da linguagem declarativa de marcao (XAML) criar toda a interface com o usurio e efetuar a ligao de dados sem usar cdigo.(Naturalmente tudo que voc pode fazer no XAML voc pode fazer via cdigo).Alm disso o WPF apresenta as seguintes novas caractersticas na verso 3.5 (service pack1 do VS): Suporte a aplicaes WEB com FireFox - Voc agora pode rodar aplicaes WPF do tipo web tanto no FireFox como no IE; Suporte ao LINQ no databinding - O WPF agora da suporte a utilizao do LINQ na vinculao de dados;(Sim, o suporte ao LINQ nativo) Suporte a interface IDataErrorInfo no databinding - Agora a infraestrutura do databinding pode capturar erros de validaes e exib-los usando esta interface; Suporte a utilizao interativa de controles em um controle RichtTextBox; Suporte para a utilizao de elementos 2-D em superfcies 3-D; Um modelo de Add-In que permite usar componentes de terceiros em um contexto de segurana;O que o DataBindingPara comear a usar o databinding com WPF voc deve sempre definir um destino e uma origem.O destino da ligao pode ser qualquer propriedade acessvel ou elemento derivado da classe DependencyProperty. Um exemplo a propriedade Text do controle TextBox.A classe representa uma propriedade de dependncia que registrada com WPF. Propriedades de dependncia fornecem suporte para expresses de valor, validao de propriedades e a coero de valores dependentes, valores padro, herana, a ligao de dados, animao, notificao e estilo.

A origem da ligao pode ser qualquer propriedade pblica, incluindo propriedades de outros controles , objetos CLR, elementos XAML, datasets, arquivos XML, etc. A WPF oferece dois provedores especiais para ajudar na ligao de dados: XmlDataProvider e ObjectDataProvider.O objeto XmlDataProvider permite Acessar aos dados XML declarativs para associao de dados.XmlDataProvider expe das seguintes maneiras para acessar dados XML: Voc pode incorporar dados usando a classe XmlDataProvider; Voc pode definir a propriedade Source para a URI uma arquivo de dados XML; Voc pode definir a propriedade Document para um XmlDocument;

A classe ObjectDataProvider envolve e cria um objeto que voc pode usar como fonte de ligao de dados.H vrias maneiras para criar um objeto para usar como uma fonte de ligao .Por exemplo, voc pode criar o objeto na seo Recursos da pgina Linguagem de marcao de aplicativos extensvel (XAML),ou voc pode criar o objeto no cdigo e defini-lo como DataContext.

O fluxo de dados na vinculao de dados ocorrer de duas formas bsicas :

1. Unidirecional (OneWay) - A alterao feita somente na origem; Somente a propriedade do objeto alterada; a fonte de dados no alterada;2. Bidirecinal (TwoWay) - A alterao feita na origem e no destino, ou seja, a alterao da propriedade altera a fonte de dados;3. OneWayToSource: o inverso do OneWay. O que voc alterar a propriedade destino a propriedade origem alterada. Ou seja uma alterao na interface se reflete na origem de dados;

Para ficar mais claro vamos a um exemplo bem simples:Voc deseja exibir um valor de um campo de um banco de dados na propriedade Text de um controle TextBox.No modo unidirecional o valor do campo exibido na TextBox e no permite alterao (isso pode ser usado para campos do tipo somente-leitura)No modo bidirecional o valor do campo exibido e quando voc altera o valor da TextBox a alterao propagada para o banco de dados.- DataBinding entre controlesVejamos na prtica como usar sintaxe da linguagem XAML para ligar a propriedade Text de um controle TextBox e a propriedade Value de um controle Slider: onde :ElementName - indica o nome do controle que ser a fonte de dados;Path - indica a propriedade que ser usada para preencher a propriedade Text da TextBox;Em contrapartida o controle Slider precisaria ser definido assim: - DataBinding entre um controle e uma fonte de dadosAgora vejamos como ficaria a declarao para a ligao entre a propriedade Text de um controle TextBox e o campo CategoryName da tabela Categories do banco de dados Northwind.mdb:

para definir se a ligao de dados unidirecional ou bidirecional usamos a propriedade Mode:

Alm disso podemos usar o recurso de criar modelos e de usar a classe DataTemplate para a realizar a vinculao de dados.No WPF os controles possuem um modelo padro definido pelo sistema operacional. Voc pode personalizar o visual de um controle atravs da criao de templates(modelos). Veja o exemplo abaixo:

Neste cdigo estamos definindo que o boto fique com o formato de uma elipse atravs da criao de um template.Usando a classe DataTemplateO modelo data templating da WPF fornece a voc uma grande flexibilidade para definir a apresentao de dados. Os controles WPF possui funcionalidades embutidas para suporta a personalizao da apresentao dos dados.Toda a funcionalidade de modelagem do WPF esta baseada na classe FrameworkTemplate.A classe DataTemplate deriva de FrameworkTemplate como todas as outras classes usadas para o propsito da modelagem. muito mais fcil e rpido criar uma DataTemplate via declarao XAML do que usar cdigo de programa. O cdigo para criao de modelos atualmente um tanto complexo e confuso, enquanto que a linguagem declarativa XAML simples e limpa.O DataTemplate pode gerar tantos elementos visuais quantos forem necessrios para exibir o objeto de dados. Esses elementos usam ligaes de dados para exibir os valores da propriedade do objeto de dados. Se um elemento no sabe como exibir o objeto que ele deve processar, ele simplesmente chama o mtodo ToString nele e exibe o resultado em um TextBlock. Uma outra caracterstica da WPF que usada em conjunto com os modelos conhecido como 'triggers' (gatilhos). Um gatilho algo como um bloco if usado no cdigo procedural e somente executa o que o bloco contm quando uma condio avaliada for verdadeira.Os triggers so disparados por condies como por exemplo os valores das propriedades, e permitem alterar os estilos dos objetos e efetuar diversas aes. H diversos tipos de triggers mas os dois tipos bsicos so : Triggers de propriedade - Tm como condio o valor de uma propriedade do objeto: MultiTriggers - So gatilhos(triggers) que tm como condio valores de vrias propriedadesExemplo de ligao de dadosVou encerrar este artigo com um exemplo prtico de ligao de dados mais simples que existe : A ligao as propriedades de um elemento.Neste exemplo temos um objeto origem que um elemento WPF e sua propriedade Source que uma propriedade de dependncia.Abra o Visual Studio 2008 e crie um novo projeto, menu File-> New Project, do tipo WPF Application com o nome wpf_DatBinding;Na janela padro Window1.xaml inclua a partir da ToolBox um controle Slider e um controle TextBlock no interior do leiaute Grid:

Define as propriedades dos controles conforme mostrado no arquivo XAML, segue abaixo o cdigo usado:Controle Slider:

Controle TextBlock:

Ao executar o projeto e mover o ponteiro do controle Slider o tamanho do texto ir ser alterado conforme voc move para direita ou para esquerda, conforme a figura abaixo:

Veja que voc no usou cdigo apenas a poderosa linguagem declarativa de marcao XAML. A declarao responsvel pelo comportamento : FontSize="{Binding ElementName=Slider1, Path=Value}"Nesta declarao estamos vinculando a propriedade Value do Controle Slider1 a propriedade FontSize da propriedade Text do controle TextBlock.No controle Slider configuramos apenas o valores mximo e mnimo.Veja um exemplo de aplicao WPF com mais recursos em http://www.vertigo.com/familyshow.aspx (FamilyShow)Faa o download dos fontes do FamlyShow em : http://www.codeplex.com/familyshow/Release/ProjectReleases.aspx?ReleaseId=23637O familyShow uma aplicao WPF gratuta disponibilizada sob a licena Ms-PL que permite baixar o cdigo-fonte e abr-lo. Ento voc pode baixar os fontes do FamilyShow e abrir no seu Visual Studio para estudar o cdigo.Voc ter uma aplicao com uma excelente qualidade grfica e com acesso a dados.

Com esta pequena introduo espero ter lanado alguma luz sobre o funcionamento do databinding do WPF. A seguir irei mostrar exemplos mais funcionais com vinculao a fonte de dados.Eu sei apenas WPF , mas eu gosto... Referencias:http://msdn.microsoft.com/en-us/library/system.windows.forms.autocompletemode.aspxhttp://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.autocompletemode.aspxhttp://blogs.zdnet.com/Stewart/?p=320http://msdn.microsoft.com/pt-br/library/cc564903.aspx

Jos Carlos Macoratti