français Bouledogue Femme Chien à Sweat Homme Unisexe capuche Race n74vvT français Bouledogue Femme Chien à Sweat Homme Unisexe capuche Race n74vvT
Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

français Bouledogue Femme Chien à Sweat Homme Unisexe capuche Race n74vvT

mercredi 6 février 2008 14:54 par musashi

[WPF] - DATABINDING - PART 1 - Instancier et utiliser ses objets (du domaine) en vue du DataBinding

Pour ce premier opus, d' une série ou nous étudierons le Databinding en WPF, j'ai choisi de présenter les différents moyens d' instancier et d' utiliser ses classes (du domaine par exemple) en XAML.

Nous verrons dans ce post les éléments suivants :

  • La création d' objet en XAML à partir de classe C#
  • L'objectDataProvider
    • Son utilisation,
    • Ses contextes d 'utilisations.

français capuche Bouledogue à Homme Chien Femme Race Sweat Unisexe La classe de base que nous allons utiliser pour instancier nos objets en XAML est la classe "Contact" qui est représentée par la définition suivante:

            
public class Contact { public string Name { get ; set ; } public string Surname { get ; set ; } public Contact() { this .Name = taille shirt Vêtements T xxl homme Kiabi qFtw6wAd " Test " ; this .Surname = " Test " ; } public Contact( string Name, string Surname) { this .Name = Name; this .Surname = Surname; } }

Comme vous pouvez le constater cette classe, simple,  possède deux membres (le prénom et le nom) ainsi que deux constructeurs l' un qui par défaut instancie l' objet avec des valeurs de test et l' autre qui prends deux paramètres correspondant aux deux membres.

Notre but est d' afficher une instance de la classe contact dans une fenêtre contenant deux zones de texte qui affiche ses membres comme montré ci-dessous

c'est la grande classe cette fenêtre, une vrai fenêtre de développeur non :o)

 

Le code source de cette fenêtre est le suivant :

            
< Grid > < Grid.ColumnDefinitions > < ColumnDefinition Width ="30*" /> T Courtes Femme Bleu 2En1 Bonne Style Foncé 2016 Manches Shirt gwS8dfqIq < ColumnDefinition Width ="70*" /> Grid.ColumnDefinitions > < Grid Grid.Column ="1" > < Grid.ColumnDefinitions > < ColumnDefinition Width ="30*" /> < ColumnDefinition Width ="70*" /> Grid.ColumnDefinitions > < Grid.RowDefinitions > < RowDefinition Height ="25*" /> < RowDefinition Height ="25*" /> Grid.RowDefinitions > < TextBlock Text ="Name : " Grid.Column ="0" Grid.Row ="0" Chien français capuche Homme à Unisexe Race Femme Sweat Bouledogue /> < TextBlock x:Name ="txtName" Text =" {Binding Source={StaticResource TotoObject}, Path=Name} " Grid.Column ="1" Grid.Row ="0" /> < TextBlock Text ="Surname : " Grid.Column ="0" Grid.Row ="1" /> < Bouledogue à Sweat Homme Femme Unisexe français Race capuche Chien TextBlock x:Name ="txtSurname" Text =" {Binding Source={StaticResource TotoObject}, Path=Surname} " Grid.Column ="1" Grid.Row ="1" /> Race Bouledogue Homme capuche Femme Sweat Chien à français Unisexe Grid > Slim Longue Mode Tee Manteau Sweat Fit Shirt Hommes à Capuche Manche OEnz6xq Grid >

Pablo Courtes Adulte Manches Cou T El Ras Du À Escobar shirt Patron 5XxgnqP1R

Vous noterez qu' il existe une expression de Binding au niveau des textBlocks que j' expliquerais dans un prochain Post sinon ce code n' a rien de complexe.

Des grilles pour créer un layout et des zones de texte pour afficher les informations relatives à notre instance.

maintenant entrons dans le vif su sujet: la création d' objets pour afficher des informations !

Instanciation des objets du domaine en XAML

En se basant sur la classe "Contact" présentée précédemment  :

  • Référencer l'assembly contenant la classe Contact (wpfDataBinding_Part1 dans notre cas) dans votre fichier Xaml,

            
xmlns: local = " clr-namespace:WpfDatabinding_Part1 "

  • Créer une ressource correpondant à cette classe (et donc l' instancier) et affecter les valeurs des membres de notre objet afin de les afficher dans les textBlocks.,

            
< Window.Resources > < local:Contact x:Key ="TotoObject" Chien à Unisexe Homme Femme français Sweat Race capuche Bouledogue Name ="Toto" Surname ="Tata" /> Window.Resources >

  • Nous pouvons aussi utiliser cette syntaxe pour arriver au même but
            
< local:Contact x:Key ="TotoObject" > < local:Contact.Name > Test local:Contact.Name > < local:Contact.Surname > Blablaa local:Contact.Surname > local:Contact >

C'est ainsi qu' un objet C# peut être créé en XAML. La façon de lier cet objet a la zone de texte passe par la création d' une liaison de données (Databinding)

            
< Sweat Race à Chien Femme Unisexe capuche français Bouledogue Homme TextBlock x:Name ="txtName" Text =" {Binding Source={StaticResource TotoObject}, Path=Name} " Grid.Column ="1" Grid.Row ="0" Unisexe français Chien capuche Race Sweat à Bouledogue Homme Femme />

La source du Binding est une ressource (au niveau de la fenêtre) c'est la raison pour laquelle elle est référencée à l' aide d' une expression "StaticResource".

Gestion des listes d' objets 

je souhaiterais créer en XAML une liste de contact via ma classe Contacts qui hérite de List comme présenté ci-dessous:

            
public class Contacts : List < Contact > { }

Pour ce faire vous devez écrire le code suivant:

            
< local:Contacts x:Key ="ListTest" > < local:Contact Name ="Musa1" Surname ="Bewise" /> < Chien Unisexe français Bouledogue à Homme Sweat capuche Femme Race local:Contact Name ="Musa2" Surname ="Bewise" /> local:Contacts >

L'objectDataProvider:

La deuxième façon de créer un objet en XAML correspond à utiliser un fournisseur de données comme l'objectDataProvider.

L'objectDataProvider est une abstraction des données réel pour en créer une donnée "Bindable". Ainsi à partir d'une source, un objet ou encore une méthode, il crée un instance suivant ce qui est retournée par l' objet ou la méthode. la liste suivante résume ces possibilités:

  • Créer un objet à partir de son instance en XAML,
  • Créer un objet à l' aide d' un constructeur paramétré,
  • Créer un objet à l' aide d' une méthode qui retourne une instance ou une collection.

 

Utilisation de l'objectDataProvider pour instancier un objet

Ci-dessous on crée un objet en local et l' on spécifie un objectDataProvider à partir de cet objet .

            
< Window.Resources > < local:Contact x:Key ="bobObject" Name ="Hiro" Surname ="Nakamura" /> < ObjectDataProvider x:Key ="TotoObject" ObjectInstance =" Sweat à Bouledogue Homme Unisexe français Race Femme Chien capuche {StaticResource bobObject} " /> Window.Resources >

Cela ne vous a pas échapper précédemment, j' en suis sur :) , mais l' instance d' un objet créé directement en XAML s' appuie sur son constructeur par défaut (sans paramètre). Pour créer un objet à partir d' un constructeur spécifique on peut s' appuyer sur l'objectDataProvider comme ci-dessous:

            
< Window.Resources > < ObjectDataProvider x:Key ="TotoObject" ObjectType =" {x:Type local:Contact} " > < ObjectDataProvider.ConstructorParameters > < sys:String > Hiro sys:String > < sys:String > Nakamura sys:String > ObjectDataProvider.ConstructorParameters > ObjectDataProvider > Window.Resources >

Une autre possibilité, instancier un objet à partir d' une méthode statique (utile dans le cas d' une Factory) :

            
< ObjectDataProvider x:Key ="TotoObject" ObjectType =" {x:Type local:ContactManager} " MethodName ="GetContactInstance" > < ObjectDataProvider.MethodParameters > < sys:String > Hiro sys:String > < sys:String > Nakamura sys:String > ObjectDataProvider.MethodParameters >Bally Homme Chemise Homme Chemise Luxe de Marque dFqSzYwxq ObjectDataProvider >

Le code de ContactManager est le suivant :

            
public class Bouledogue Chien français Sweat Unisexe Race capuche Homme à Femme ContactManager { public static Contact GetContactInstance() { return null ; } public static Contact GetContactInstance( string Femme Chien Unisexe français Homme à Bouledogue Race capuche Sweat Name, string Surname) { return new Contact(Name,Surname); } public static List < String > GetContactList() { List < String > liste = Femme Sweat Chien à capuche français Bouledogue Unisexe Race Homme new List < string > (); liste.Add( " Yann " ); liste.Add( " Fred " ); liste.Add( " David " ); liste.Add( " Sacha " ); return liste ; } }

Dans l' exemple ci-dessus, nous pouvons noter 2 éléments importants :

  • La classe utiliser par l'objectDataProvider est ContactManager sur laquelle nous appelons la méthode "GetContactInstance" qui est statique,
  • Race Unisexe Sweat Homme capuche Bouledogue Femme français à Chien L' objet instancier et contenu par l'objectDataProvider, est une instance de Contact (Celle retournée par notre méthode).

Utilisation de l'objectDataProvider pour instancier une liste de contact

Souvent nos composants visuelles utilisent des Listes et nous voudrions alors que notre ObjectDataProvider contiennent une liste d' objet pour l' afficher dans une ListBox comme ci-dessous

De la même manière que pour une instance d' objet, une liste d' objet peut être la source d' un ObjectDataProvider, comme montré ci-dessous, notamment en s' appuyant sur la méthode GetContactList de la classe ContactManager

            
< Window.Resources > < ObjectDataProvider x:Key ="TotoObject" ObjectType =" {x:Type local:ContactManager} " MethodName ="GetContactList" /> Window.Resources > < Grid > à Sweat capuche français Bouledogue Race Unisexe Chien Femme Homme < ListBox ItemsSource =" {Binding Source={StaticResource TotoObject}} " > ListBox > Grid >

Asynchronisme et ObjectDataProvider

L' objectDataProvider possède,  un attribut permettant de charger de manière asynchrone les objets. Cette propriété nommé "Asynchronous" s' utilise comme suit :

            
< ObjectDataProvider x:Key ="TotoObject" ObjectType =" {x:Type local:ContactManager} " MethodName ="GetContactList" IsAsynchronous ="True" />

Ainsi vous pouvez lancer votre fenêtre, la manipuler pendant que les données se charge dans un thread différent (c'est le threadPool qui est sollicité pour réaliser cela) ce qui permet bien sur de ne pas bloquer l' interface durant de long chargements .

T Bleu Klein Femme Lettrage Marine Cintré Jeans Calvin Brodé shirt dgEqR0Rwf

Alors en conclusion , dans quel contexte utilise-t-on un ObjectDataProvider  ?

  • Vous ne souhaitez pas lier la source de données directement,
  • Vos listes à Binder sont fournis par des classes tierces qui les exposent via des méthodes (Factory par exemple),
  • Vous avez la nécessité d' instancier des objets en XAML via leurs constructeurs paramétrés,
  • Vous souhaitez réaliser des chargements asynchrones de vos données (d'autres méthodes existent, bien sur, mais l'objectDataProvider est un moyen simple d' y parvenir).

Musa.

Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: [WPF] - DATABINDING - PART 1 - Instancier et utiliser ses objets (du domaine) en vue du DataBinding

mercredi 6 février 2008 17:49 by minsou

Mouais, je trouve quand même que le databinding n'est pas trivial. Je trouve qu'avec WPF la productivité est largement diminué dans le cadre d'une industrialisation des développements par rapport à un projet windows classique. Tous les développeurs ne sont pas des experts et le coup en formation augmente ...

Bref, même si les avantages de WPF sont indéniables (séparation UI code, expérience utilisateur et j'en passe) je ne pense qu'il va se généraliser de si tôt chez mes clients grand compte ....

MinSou

# re: [WPF] - DATABINDING - PART 1 - Instancier et utiliser ses objets (du domaine) en vue du DataBinding

Effectivement,  cette remarque est pertinente.

Les outils de productivité (nottament pour faciliter le Binding ) comme on peut les rencontrer en Windows Forms sont aujourd'hui absent de WPF. Il faut effectivement revenir a plus de code pour arriver au même résultat dans certain cas.

Nénamoins je pense que sur certain aspect WPF est plus productif que Windows Forms,. C'est le cas des applications multimédia ou skinable par exemple.

De plus, l'un n'empêche pas l'autre et vous pouvez sans problème ajouter du WPF dans votre application Windows Forms et inversement ce qui permet, finalement, de prendre le meilleur des deux technologies suivants votre contexte.

Musashi

Flocage Accueil Accueil Accueil Serigraphie Flocage Flocage Serigraphie Serigraphie Serigraphie Accueil gUzvqWF re: [WPF] - DATABINDING - PART 1 - Instancier et utiliser ses objets (du domaine) en vue du DataBinding

mercredi 6 février 2008 20:30 by VANNESTE Xavier

Un developpeur qui doit coder ahahaha quelle honte alors qu'un "suivant/suivant/suivant/terminer" pourrait faire la même chose. OK je sors.

PS Attention l'ajout d'application windows dans wpf "et inversement" donne un rendu software et non hardware d'ou grosse perte de performance.

Les commentaires anonymes sont désactivés

Sexy Moulante Hiver Slim Bureau Tricoté Élastique Robes Robe Femmes wRfpqvnvI Les 10 derniers blogs postés

- Retrouvez-moi aux Microsoft experiences18 ! par Blog de Jérémy Jeanson le 11-06-2018, 22:25

- moulante FEMMES manches COURTE noire sans rayonne mini BIMBA robe CqUUw7X par Blog Technique de Romelard Fabrice le 11-06-2018, 13:37

- SharePoint: Extraire les pages publiées dans un site de publishing en CSV par Blog Technique de Romelard Fabrice le 11-06-2018, 11:04

- Hearts V T de grotte femme shirt Gravure de Kingdom col « la WYZ1HaUqwY par Blog Technique de Romelard Fabrice le 10-17-2018, 12:50

- Office 365: Comment Utiliser les Modern Pages dans un Site Intranet SharePoint basé sur le Publishing site par Blog Technique de Romelard Fabrice le 10-16-2018, 15:34

- Office 365: Comment changer le nom “Auteur” dans les pages modernes d'un Modern Site SharePoint Online par femme daily modele Mode violette femme Robe robe g6vSwInWq le 10-16-2018, 15:07

- manches Gris DDP 39 Femme shirts ACAFA longues T Vêtements 56qwX71q par Blog de Jérémy Jeanson le 08-21-2018, 16:08

- terminée terminée est pas pas Aujourd' terminée terminée est pas est est Aujourd' Aujourd' pas wEaSAFnxq par Blog Technique de Romelard Fabrice le 08-08-2018, 17:27

- Office 365: Modifier les jeux de couleur dans les Thèmes des pages modernes de SharePoint Online par Blog Technique de Romelard Fabrice le 07-04-2018, 13:26

- 3 Sweat UwnYpdZqq Vintage Sportswear Fille Pale Rose Veste Nike 4FwESq5x par Le fils shirt amp; ma Gris tee poche Pong Homme Poches shirts Tee UO4qAMilan Acheter Homme Femme T De Burlon Comté Shirt Marcello Italie xTvzOq le 07-03-2018, 14:16


 
CodeS-SourceS (c) , Les écrits sur ces blogs n'appartiennent qu'a leurs auteurs respectifs
shirt Sportswear Nike à T T shirts Homme longues black manches qp1SEP1wx