26
DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:[email protected] http://blogs.microsoft.fr/mitsufu Pierre LAGARDE, relations techniques développeurs mailto : pierlag @ microsoft.com - http://blogs.developpeur.org/fox Présentation technique, Paris, 28 septembre 2005

DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:[email protected]:[email protected] – //blogs.microsoft.fr/mitsufu

Embed Size (px)

Citation preview

Page 1: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

DataBinding avancé

Mitsuru FURUTA, relations techniques développeursmailto:[email protected] – http://blogs.microsoft.fr/mitsufu

Pierre LAGARDE, relations techniques développeurs

mailto:[email protected] - http://blogs.developpeur.org/fox

Présentation technique, Paris, 28 septembre 2005

Page 2: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Agenda

Introduction

Les sources de données

Le modèle ASP.NET (v1 et v2)

Le modèle WinForms

Conclusion

Page 3: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Introduction

Pourquoi cette technologie ?Architecture en couches

Contrôles génériques

Liaison bidirectionnelle

Contrôleur de type MVC

Contrat nécessaire entre les contrôles et les sources de données

Les sources de donnéesImplémentation d’interfaces communes définissant le modèle

Les éléments simples et les collectionsTypeDescriptor, notion de vue

Les contrôlesConnexions aux vues et aux interfaces de binding

Page 4: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Démo 1: Helloworld…

…ou presque

Page 5: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Introduction

Ca marche tout seulBinding sur objets

Binding sur collections

Binding en mode design

Binding == Reflection ?

Page 6: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données

Mise en évidence des TypeDescriptorsInterception d’un changement de valeur

Personnalisation de la vue d’un objetAjout d’une propriété

Champ calculé

Objet clone

Les collectionsFonctionnement de base: array, generics

Personnalisation de la vue depuis la collection (ITypedList)

OnCalc

Objets « relais »: DataView, BindingSource, ObjectDataSourceL’interface IBindingList

Ajout d’un élément virtuel

Le cas du DataSet

Page 7: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, les TypeDescriptors

Du Type au TypeDescriptorTypeDescriptor.GetProperties(type)

Rôle des PropertyDescriptors:Définit la vue d’une propriété (nom, type, etc)

Fournit un accès à la valeur de chaque propriété lecture et en écriture

Possibilité de se brancher aux évènements (Changed)

Page 8: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

TypeDescriptor

CustomerCustomer

•Id•Name•CompanyName•IsPartner

•Id•Name•CompanyName•IsPartner

TypeDescriptorTypeDescriptor

•Id•Name•CompanyName•IsPartner

•Id•Name•CompanyName•IsPartner

DataBindingDataBinding

ReflectionReflection

Page 9: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Démo 2: mise en évidence du TypeDescriptor

Page 10: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, personnalisation de la vue d’un objet

L’interface ICustomTypeDescriptorGetProperties() permet la réécriture de la vue d’un objet propriété par propriété. (via les PropertyDescriptors)

Différence entre TypeDescriptor.GetProperties(object) et TypeDescriptor.GetProperties(type)

TypeDescriptor.GetProperties(object) renvoie les PropertyDescriptors éventuellement réécrites par ICustomTypeDescriptor

TypeDescriptor.GetProperties(type) renvoie les PropertyDescriptors du type de base sans tenir compte d’une éventuelle implémentation d’ICustomTypeDescriptor

Page 11: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

ICustomTypeDescriptor

OrderOrder

•OrderId•Amount•OrderId•Amount

ICustomTypeDescriptorICustomTypeDescriptor

•OrderId•Amount•OrderId•Amount

DataBindingDataBinding

ReflectionReflection

•Fake•Fake

Page 12: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, ICustomTypeDescriptor

Page 13: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, ICustomTypeDescriptor

Page 14: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Démo 3: ajout d’une propriété virtuelle

Page 15: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, « la guerre des clones »

Création d’un objet à la vue entièrement paramétrableRéécriture complète de l’ensemble des PropertyDescriptors

Mise en place d’une collection de définitions de propriétés

Page 16: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

ICustomTypeDescriptor

CustomTypeObjectCustomTypeObject

•Properties[]•Properties[]

ICustomTypeDescriptorICustomTypeDescriptor

DataBindingDataBinding

ReflectionReflection

•Name•Text•Anything

•Name•Text•Anything

•Name•Text•Anything

•Name•Text•Anything

Page 17: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Démo 3 bis: vue dynamique

Page 18: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, les collections

Modifier la vue d’un objet depuis une collectionPermet d’être indépendant de la définition de l’objet

Permet de faire des modifications propre à la présentation

L’interface ITypedListGetItemProperties(): redéfinit la vue des éléments de la collection

Attention aux listes hétérogènes !Le type des éléments n’est testé qu’une seule fois (TypeDescriptors uniques !)

Page 19: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, ITypedList

Collections: ArrayList, générics, …

Collections: ArrayList, générics, …

•Id•Name•CompanyName•IsPartner

•Id•Name•CompanyName•IsPartner

ITypedListITypedList

•Id•Name•CompanyName•IsPartner

•Id•Name•CompanyName•IsPartner

DataBindingDataBinding

ReflectionReflection

•Fake•Fake

Items[]Items[]

Page 20: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données, ITypedList

Page 21: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Demo 4: ajout d’une propriété virtuelle à une collection

Page 22: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Demo 5: ajout d’un item virtuel à la vue

Page 23: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données

Pourquoi IListSource ?Palier au manque de délégation d’implémentation d’interface

Page 24: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Les sources de données

Le cas du DataSet

Page 25: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Le modèle WinForms

La classe System.Windows.Form, support du moteur de Binding

Les managersPropertyManager

CurrencyManager

L’objet BindingContext

Page 26: DataBinding avancé Mitsuru FURUTA, relations techniques développeurs mailto:mitsufu@microsoft.commailto:mitsufu@microsoft.com – //blogs.microsoft.fr/mitsufu

Le modèle ASP.NET