Este artigo apresenta o recurso de Data Binding presente na tecnologia WPF – Windows Presentation Foundation, sua utilização básica na criação de interfaces de usuário para facilitar o vínculo dos dados apresentados, reduzindo o código fonte do aplicativo, tornando-o mais enxuto e elegante. O Data Binding pode ser utilizado para somente visualizações, como interações com Banco de Dados, coleções, elementos da própria interface de usuário ou propriedades de classes.

O Data Binding é útil para criar projetos de softwares mais flexíveis, aplicar conceitos de vínculo de dados, possibilitar um desenvolvimento mais produtivo e com códigos mais enxutos. Elimina a necessidade de se escrever dezenas de linhas de código para apresentar dados ao usuário, recuperar alterações e enviar a uma classe de acesso a dados, por exemplo.

Introdução ao Data Binding no WPF

O artigo inicia com a definição do que é o Data Binding no contexto da tecnologia WPF, para que é usado, quais seus benefícios. Posteriormente são apresentadas as formas possíveis de utilização do Data Binding. Durante a apresentação dos conceitos do Data Binding são mostrados pequenos trechos de código com exemplos da aplicação do conceito. Na parte prática, veremos um exemplo de uso de Data Binding com banco de dados e Entity Framework.

O Data Binding não é uma total novidade para os desenvolvedores .NET. Ele tem acompanhado e auxiliado muito no desenvolvimento de aplicativos em Windows Forms e também ASP.NET, porém em WPF ele foi melhorado muito em questão de funcionalidades e performance. Seu conceito básico ainda é o mesmo: vincular dados de uma fonte para um destino, ou seja, ao contrário de você ter que alimentar seus controles na interface de usuário um a um via código, ou então percorrer coleções via código e jogar dados em um ListView ou DataGrid, o Data Binding permite que você apenas informe de onde ele deve obter o valor para ser alimentado em algum lugar específico.

Imagine que você tenha uma ListView em seu formulário e você possui em seu código uma coleção de dados em memória. Ao invés de percorrer esta coleção criando um ListViewItem para cada iteração percorrida, você possa fazer algo mais prático como simplesmente dizer: “ListView, obtenha seus itens daqui, mantenha seus valores atualizados e formate-os para ficar assim.”. O Data Binding fornece esta funcionalidade e muito mais ainda.

O Data Binding possui como sua classe principal a Binding, que é responsável por vincular as propriedades do objeto de fonte com as propriedades do objeto de destino de forma a manter um canal de comunicação aberto entre estes, permitindo a sincronização de dados e atualização de um objeto a partir do outro conforme configuração definida.

Data Binding via código fonte

Apesar do XAML ser a codificação mais importante em WPF, o Data Binding não é exclusivo dele, podendo ser utilizado no código fonte normalmente. Vamos supor que tenhamos um TreeView em nosso formulário principal chamado treeView e abaixo dele tenhamos um TextBlock. Agora desejamos que no momento em que for selecionado um item na TreeView seu texto seja visualizado no TextBlock. Para implementarmos esta funcionalidade, utilizaremos o Data Binding via código fonte (C#).

Para o melhor entendimento, na Listagem 1 está apresentada a codificação do formulário com os controles mencionados já adicionados e formatados.

Listagem 1. Formulário MainWindow.xaml – Código XAML

        <Window x:Class="ListBoxBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
        <Grid>
        <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <TreeView x:Name="treeView" Margin="20">
        <TreeViewItem Header="Item Pai 1">
        <TreeViewItem Header="Item Filho 1" />
        <TreeViewItem Header="Item Filho 2" />
        <TreeViewItem Header="Item Filho 3" />
        </TreeViewItem>
        <TreeViewItem Header="Item Pai 2">
        <TreeViewItem Header="Item Filho 4" />
        </TreeViewItem>
        <TreeViewItem Header="Item Pai 3" />
        </TreeView>
        <TextBlock x:Name="textBlock" Grid.Row="1" Height="20" Width="100"
        HorizontalAlignment="Left" VerticalAlignment="Top" Margin="20,10"/>
        </Grid>
        </Window>
        

Na inicialização do nosso formulário padrão, no código fonte (C#) após a chamada do método InitializeComponent() podemos implementar o vínculo conforme informado na Listagem 2.

Listagem 2. Criando o Data Binding

        public partial class MainWindow : Window
        {
        public MainWindow()
        {
        InitializeComponent();
        //Criando o objeto binding
        Binding binding = new Binding();
        //Informando o objeto fonte.
        binding.Source = treeView;
        //Informando a propriedade do objeto fonte que será vinculada.
        binding.Path = new PropertyPath("SelectedItem.Header");
        //Informando no objeto de destino, a propriedade que será
        //alimentada conforme a propriedade fonte, e que o fará.
        textBlock.SetBinding(TextBlock.TextProperty, binding);
        }
        }
        

Como pode ser verificado no código da Listagem 2, inicialmente é criada a instância da classe Binding que será responsável por vincular os dados entre os controles da tela. Após temos a informação da propriedade Source do objeto binding que informa a fonte de dados a ser pesquisada, de onde vamos ler o valor que queremos vincular a outro controle. Nesta propriedade podemos vincular qualquer objeto do .NET, incluindo coleções, arquivos XML ou classes que contenham acesso a banco de dados.

Temos na linha 11 a alimentação da propriedade Path. Esta propriedade é onde informamos qual informação do item fonte desejamos verificar / buscar / vincular. Em nosso caso, estamos vinculando a propriedade SelectedItem.Header a qual retorna o texto do nosso item selecionado na TreeView.

...

Quer ler esse conteúdo completo? Tenha acesso completo