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:
- Objeto utilizado como fonte de dados(Source)
- Objeto de alvo(Target).
- 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.
- 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!