Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

Découvrir Windows Presentation Foundation

Utiliser une ObservableCollection

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Apprenez à utiliser une ObservableCollection et un BackgroundWorker. Il s'agit d'enrichir la liaison de données et le traitement dans une application WPF.
07:26

Transcription

Pour finir, voyons deux ou trois fonctionnalités supplémentaires de WPF, ou des façons de travailler que j'ai utilisées dans mon projet SQL Trismegiste, dont voilà le vrai code source, c'est à dire que ce n'est plus la version un peu simplifiée sur laquelle on a travaillé jusqu'à présent. J'ai repris l'intégralité de mon code de source pour vous montrer juste les fonctionnalités. Ce que je fais avec SQL Trismegiste, c'est ici j'entre un nom de serveur, alors, je fais un combo pour pouvoir avoir la liste des serveurs SQL qui sont disponibles sur le réseau, mais cette fonctionnalité d'adeo.net est bogué pour l'instant, ça ne fonctionne pas sur les versions récentes, ça va peut-être se corriger. Et donc, j'introduis ici le nom d'un serveur. Je regarde quel type d'authentification, je me connecte, et ici j'ajoute la liste de mes bases de données de façon à pouvoir sélectionner une base et, ensuite, lancer l'analyse. Alors, deux choses par rapport à ça : d'abord à la connexion, je vais alimenter une collection de bases de données, et bien sûr par binding. Eh bien, ici ma grid va automatiquement s'alimenter. Vous allez voir, j'en ai fait ce qu'on appelle une collection observable qui permet automatiquement de mettre à jour l'interface par rapport à des modifications et vice versa. Bon, on va voir ça dans le code. Deuxième chose : quand je lance maintenant mon analyse, je vais avoir ici des lancements d'hermeticus, bon, c'est fini, et pendant ce temps-là si je relance l'analyse, mon interface répond toujours, enfin un petit peu, quand même, mais pas forcément beaucoup, bon. Je l'ai fait aussi en utilisant ce qu'on appelle BackgroundWorker. Donc, c'est pas forcément quelque chose de propre à WPF, mais c'est intéressant de savoir qu'on peut utiliser un deuxième thread qui va travailler pendant que l'interface continue à répondre. Donc je vous montre ça dans le code. Premièrement, ici ma grid, ma liste de base de données qui est donc ici, c'est un DataGrid, je le reprends là. Ce DataGrid a du binding. Je vous ai mis ici une syntaxe un petit peu plus complète du binding parce qu'on peut dire binding et la propriété par défaut qu'on n'a pas vue encore, mais que je n'avais pas besoin de mettre, c'est-à-dire je n'ai pas mis ça. On va dire, et bien, voilà le chemin, c'est-à-dire quel est le chemin vers la propriété pour faire du binding. Vous avez aussi une propriété qui s'appelle source. Si vous voulez faire du binding à partir d'une autre source que le DataContext, c'est également possible. J'ai mis aussi ici UpdateSourceTrigger PropertyChanged pour vraiment spécifier, je n'en ai pas forcément besoin ici, mais pour vraiment spécifier que qui est-ce qui va mettre à jour la source c'est l'événement PropertyChanged, ça devrait être normalement ce qui se passe par défaut, bon. Et vous voyez ici j'ai un UpdateSourceTrigger PropertyChanged Ici, j'exprime spécifiquement que lorsqu'on va cocher, modifier la valeur de Checked, dont la source va générer en PropertyChanged. Ensuite, j'ai mes deux binding ou je n'ai pas eu besoin de mettre de chemin, en fait, le binding du parent, c'est database, c'est une collection, et à l'intérieur j'ai un objet, base de données qui contient ces propriétés. Je dis au niveau de la grid tu fais un binding sur la collection, et voilà les éléments de la classe, c'est une collection d'objets, voilà les propriétés de l'objet que tu vas reprendre pour chaque colonne. Comment j'ai fait ça dans mon ViewModel ? Eh bien j'en ai fait, je vais le chercher, vous vous souvenez ça s'appelle Databases. Voilà, j'en ai fait une collection, mais pas n'importe quelle collection, voyez, c'est une collection qui est dans le namespace System.Collections.ObjectModel, et c'est ce qu'on appelle une ObservableCollection, donc c'est un générique. L'ObservableCollection, c'est une collection particulière qui permet d'alimenter par PropertyChanged l'interface, mais aussi d'être alimenté par l’interface, parce que elle va observer les changements faits dans l'interface et elle va se mettre à jour automatiquement. Les membres de la collection vont se mettre à jour automatiquement par rapport à ce que vous écrivez, à ce que vous modifiez dans l'interface. Donc je pourrais faire un DataGrid basé sur un ObservableCollection, modifier des éléments dans ma grid dans n'importe quelle ligne, et l'ObservableCollection, est mise à jour automatiquement. Deuxième chose, je reviens dans mon interface, lorsque je lance ensuite l'analyse, cette analyse, elle est ici. Si je prends mon XAML, voilà, elle va déclencher à son clic cet événement. Cet événement ici va appeler une méthode de mon ViewModel RunFullAnalysis Et mon RunFullAnalysis va appeler, donc là je fais un certain nombre de choses : je regarde si on est connecté, je dis que tu dois te connecter, je prends la liste des bases de données etc. mais à là fin je dis worker.RunWorkerAsync, je vais, donc déclencher mon BackroundWorker qui est ici. Je vous montre sa définition. J'ai donc créé un BackroundWorker privé. J'écris un New BackroundWorker, et ce BackroundWorker va démarrer une méthode que j'ai dû définir ici, dans mon source. Et alors, on va la trouver comme ça : ici worker_RunAnalysisCompletedProgressChanged Donc il y a trois éléments. Voyez que j'ai un worker_RunAnalysis, donc ça lance cette opération d'analyse, ensuite j'ai un Worker.RunAnalysisCompleted. Qu'est-ce que je fais quand le BackroundWorker a fini de travailler ? Eh bien j'affiche quelque chose, je dis l'analyse est terminé, et puis j'ai aussi un ProgressChanged dans mon BackroundWorker, je vais envoyer des informations en disant l'état a changé. Ce qui va me permettre d'appeler cette méthode pour afficher le statut, comme vous l'aviez vu, qui disait l'analyse était en train de tourner. Donc sur ces trois méthodes, voyez, j'ai ici ReportProgress qui appelle le AnalysisProgressChanged, ici. Eh bien avec ces trois méthodes il est assez simple de faire une application avec deux threads. Le bagroundWorker est le thread de travail, et puis vous avez ce qu'on appelle le thread de l'UI, de l'interface graphique WPF qui va, lui, continuer à fonctionner pour gérer l'affichage, c'est grâce à ça qu'il est possible ici de rajouter des informations dans le texte de statut. Le fait d'avoir ces deux threads : le thread de l'UI et le thread de travail, permet d'avoir un UI qui continue de répondre à vos demandes.

Découvrir Windows Presentation Foundation

Améliorez la qualité de vos interfaces graphiques avec WPF (Windows Presentation Foundation). Découvrez le langage XAML, définissez votre interface graphique manuellement, etc.

3h12 (40 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :12 mai 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !