Seções iMasters
.NET

Arquitetura WPF: o DataBinding – Parte 01

O mecanismo de DataBinding não é novo e já existe há algum tempo. Mas diferente do mecanismo de DataBinding tradicional, dentro da arquitetura WPF, o DataBinding traz alguns recursos diferenciados que o tornam um mecanismo extremamente poderoso, eficaz e que tem papel muito importante na Arquitetura WPF além da construção de aplicativos com essa tecnologia. Neste primeiro artigo, vamos apresentar em detalhes como tirar proveito desse recurso extremamente poderoso.

O DataBinding no WPF, entre muitas outras coisas, dispõe de:

  • Propriedades que têm suporte nativo ao Binding;
  • Uma representação flexível de dados para o usuário;
  • Permite classificar e filtrar;
  • Permite também uma clara separação da lógica de negócios da interface com o usuário.

O DataBinding

A definição de DataBinding é simples: “é  o processo de conectar o aplicativo de interface com o usuário a lógica de negócios”. Embora seja simples a definição, realizar essa conexão envolve tarefas como validação, conexão com a fonte de dados e apresentação correta e organizada das informações para uma melhor visualização.

Uma grande vantagem do binding dentro do WPF é que ele traz uma vasta gama de propriedades e fontes de dados que podem ser utilizadas nas aplicações. Vamos começar a entender melhor como esse mecanismo funciona. Observe a figura abaixo:

A figura acima ilustra o processo de DataBinding. Veja como é simples, porém muito poderoso o mecanismo de Binding. Vamos começar a identificar as peças dentro desse processo.

Sempre existirá um objeto fonte(Source) e um objeto alvo(Target). Independentemente do alvo ou da fonte, o mecanismo de Binding sempre seguirá o esquema ilustrado acima.

O mecanismo de Binding é composto, além dos objetos de fonte e destino, por mais dois outros elementos que são a propriedade de destino e um caminho para o valor no objeto fonte(Source) para uso, totalizando ao todo quatro elementos. Observe a figura abaixo:

Identificando na figura acima:

  1. Objeto utilizado como fonte de dados(Source)
  2. Objeto de alvo(Target).
  3. Propriedade que terá seu valor utilizado pelo objeto de alvo(Target), ou seja, o valor desta propriedade é o Path – ou o caminho em que se encontra o valor a ser utilizado.
  4. Propriedade de destino(Target), ou seja, a propriedade que receberá o valor da propriedade do objeto utilizado como fonte de dados.

Esses quatro elementos são as peças chaves do mecanismo de binding. Os objetos podem até ser alvos e fontes diferentes, mas, de qualquer maneira, eles sempre irão se enquadrar neste mecanismo: Objeto Fonte(Source), Objeto alvo(Target), propriedade fonte e propriedade de destino.

O DataBinding e a direção do fluxo dos dados

Um dos diferenciais do binding na arquitetura WPF é a maneira como o fluxo de dados trafega entre o alvo(Target) e o Fonte(Source). O fluxo de dados pode ser OneWay, TwoWay e OneWayToSource. Observe a figura abaixo:

O fato de existirem diversas formas de direcionar o fluxo dos dados se deve ao fato de as necessidades que existem de comunicação do usuário e a fonte de dados.

Você pode, por exemplo, desejar que o usuário, ao realizar uma atualização, venha propagar a mesma para a fonte de dados, ou o objeto que é a fonte de dados somente atualiza o objeto alvo e não deseja ser notificada se o usuário realiza uma alteração.

Enfim, de acordo com a necessidade, você especifica como será a direção do fluxo de dados. Veja a descrição abaixo de cada uma das formas de trafegar o fluxo de dados:

  • OneWay: Faz com que a propriedade de origem(Source) atualize automaticamente a propriedade de destino(Target), mas não notifica a propriedade de origem caso haja uma atualização na propriedade de destino.
  • TwoWay: Faz com que tanto a propriedade de origem(Source) ou destino(Target) sejam notificadas caso haja uma alteração em uma ou outra. Este tipo de fluxo de dados é indicado para cenários mais interativos, quando existe uma necessidade de que atualizações sejam refletidas automaticamente – na fonte(Source) ou no destino(Target) – que pode ser, por exemplo, um formulário.
  • OneWayToSource: É o inverso do OneWay, permitindo somente que a propriedade de destino(Target) atualize a propriedade fonte(Source).
  • OneTime:  Embora não ilustrada acima, o OneTime é utilizado quando você deseja inicializar a propriedade de destino, mas sem que qualquer atualização posterior não seja refletida. Podemos dizer que o OneTime é um OneWay mais simples.

Você pode especificar o tipo de fluxo de dados, através da propriedade Mode da classe Binding:

<Bnding Mode=OneWay />

O que faz propagar a atualização da fonte

Agora que entendemos como funciona o fluxo dos dados entre a fonte e o destino, precisamos saber o que faz desencadear essa atualização ou essas notificações de mudança.

Os fluxos OneWayToSource e TwoWay escutam mudanças na propriedade de destino(Target) e propagam até a fonte de dados(Source), isso é chamado de atualização da fonte.

Mas como se dá essa atualização? É simples, a propriedade UpdateSourceTrigger da classe Binding é responsável por especificar como irá ocorrer essa notificação. Observe a figura abaixo:

Se o valor da propriedade estiver como UpdateSourceTrigger for PropertyChanged, a fonte(Source) é atualizada caso haja mudança na propriedade de destino(Target). Se o valor é UpdateSourceTrigger for LostFocus, a fonte é atualizada com o novo valor assim que a propriedade de destino(Target ) perde o foco.

Bom, pessoal, neste primeiro artigo de duas etapas que serão publicados sobre o Binding, conseguimos aprender o conceito do Binding, a direção do fluxo de dados, como é desencadeada a atualização da fonte de dados e ainda tivemos uma pequena introdução sobre esta importante funcionalidade do WPF.

Fiquem ligados porque ainda temos que aprender sobre como criar o binding, binding com coleções, validação… Enfim, ainda tem muita coisa boa por vir.

Abraços e até o próximo artigo!

Comente também

2 Comentários

Ygor Thomaz

Simples e objetivo. O entendimento do Binding é uma etapa importante no entendimento do pattern MVVM.

Gabriel

Como é feita está atualização da source?
Por exemplo, meu DataGrid ao ser alterado refletir diretamente no banco de dados. Como isso é possível se eu estiver usando MVVM?

Qual a sua opinião?