Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Arquitetura WPF: O DataBinding - Parte 2

Recommended Posts

Olá, pessoal, estamos seguindo com o aprendizado sobre a arquitetura WPF. E nesta segunda parte do estudo sobre o Databinding, iremos aprender como utilizá-lo efetivamente, de maneira prática e fácil.

 

Até aqui, vimos os conceitos sobre o Databinding, como ele se diferencia do mecanismo de databinding tradicional e entendemos alguns conceitos importantes. Por exemplo, como as 4 peças fundamentais no mecanismo de binding se relacionam, a direção do fluxo dos dados e como são desencadeadas as atualizações de fonte dentro do mecanismo de binding.

 

 

Criando o Binding

Recapitulando, vimos que temos os quatro componentes que compõem o mecanismo de binding: o objeto que será a fonte dos dados (source), o objeto que será o alvo (target), a propriedade de destino (targe property) e a propriedade dentro do objeto fonte que será utilizada como caminho até o valor a ser utilizado (Path). Agora supondo que temos um objeto cliente, como uma propriedade string e que vamos utilizá-lo em um textbox. Observe abaixo o XAML de exemplo: 

 

35091.png

 

Vimos os 4 componentes obrigatórios do binding em ação. A classe Pessoa é o objeto fonte de dados (source), o objeto Textbox como objeto de destino (target), a propriedade nome da classe Pessoa como propriedade que contém o valor a ser usado (Path) e por fim a propriedade Text da classe TextBox como propriedade de destino (target property). Para ilustrar melhor, veja como ficaria um diagrama do exemplo acima:

 

35100.png

 

Perceba que no objeto Texbox, não especificamos o Source. Ou seja, isso chama-se binding por omissão. Por não especificar o source, o objeto Textbox herda o Source do seu objeto Pai, sendo necessário apenas especificar a propriedade Path em que o valor da mesma será utilizado e a propriedade destino no caso a propriedade Text.

 

 

Entendendo o Binding Source

Entender como especificar o BindingSource é muito importante. Sem uma fonte para os dados, não seria possível fazer absolutamente nada. No exemplo de código anterior, o DataContext é especificado somente para o objeto Grid, isso quer dizer que todos os objetos filho de Grid herdam o seu DataContext.

 

Existem várias maneiras de se especificar o BindingSource, ou seja, a origem dos dados a serem utilizados. O Binding por omissão é útil, quando queremos ligar vários objetos utilizando propriedades de uma mesma fonte. E você também pode especificar diretamente no objeto de destino o objeto fonte de dados (Binding Source), conforme ilustra a figura abaixo:

 35093.png

 

O objeto fonte de dados pode ainda ser especificado utilizando-se a propriedade da classe Binding, chamada ElementName. Conforme ilustra a figura abaixo, o objeto Textblock está ligado ao objeto Textbox através dessa propriedade, fazendo com que tudo que é digitado na caixa de texto apareça no Textblock.

 

 35096.png

 

 

A Propriedade Path

Se a sua fonte de dados é um objeto de negócios, você utiliza a propriedade da classe Binding, chamada Path, para indicar o valor a ser utilizado pelo Binding.O primeiro exemplo neste artigo ilustra bem isso, em que o objeto de fonte de dados é um objeto de negócios chamado pessoa, e a propriedade utilizada pelo Textbox é a propriedade nome.

 

 

Dica importante!

Quando é utilizada a ligação vazia, ItemsSource{Binding}, o objeto em questão que utiliza essa declaração herda o DataContext do objeto Pai, podendo fazer uso de qualquer propriedade do objeto fonte de dados que está ligado ao objeto pai.

 

 

ValueConverters

Observe o seguinte exemplo:

 

35099.png

 

A propriedade Background da classe Button é do tipo Brush, mas está sendo atribuído um valor do tipo string a ela. Talvez você esteja se perguntando como é que funciona isso. Uma propriedade que é do tipo Brush pode ter associado a ela um valor do tipo string e não dar exceção? Não é mágica, isso se deve graças aos TypeConverters, que fazem com que haja uma conversão de um determinado tipo, para o tipo correto da propriedade. Veja o diagrama abaixo:

 

35101.png

 

Os TypeConverters podem serem construídos através da implementação da interface IValueConverter. Como o exemplo de código abaixo:

 

[ValueConversion(typeof(Color), typeof(SolidColorBrush))]

public class ColorBrushConverter : IValueConverter

{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

{

Color color = (Color)value;

return new SolidColorBrush(color);

}

 

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

{

return null;

}

}

São classes como essas, que permitem a ?mágica? mostrada no exemplo funcionar, em que o valor de uma propriedade do tipo string, por exemplo, consiga ser atribuída a uma propriedade cujo valor é do tipo Brush.

 

Espero que vocês estejam conseguindo acompanhar e atentar para os detalhes do mecanismo de Binding que são extremamente poderosos e úteis na hora de realizar a ligação dos dados em uma aplicação WPF.

 

Até a próxima!

 

 

 

http://imasters.com.br/artigo/20336/dotnet/arquitetura-wpf-o-databinding-parte-2

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.