Récemment j’ai utilisé un contrôle d’une librairie tierce permettant de générer des rapports. Ce contrôle relativement complexe pouvait mettre jusqu’à plusieurs secondes pour s’afficher correctement selon la machine sur laquelle est exécutée l’application.
Le chargement du contrôle est lié au thread de l’interface utilisateur et le temps que le contrôle n’est pas entièrement chargé l’utilisateur ne peut effectuer aucune autre action via l’interface. Une interface non utilisable, même quelques secondes peut être qualifiée comme un “plantage”, et il n’est pas rare de voir alors l’utilisateur essayer de cliquer plusieurs fois.
Lire la suite…
Lorsqu’on utilise le pattern MVVM et les ICommand, il nous arrive régulièrement de vouloir afficher une Message Box de confirmation avant de procéder à l’exécution de la Commande. C’est notamment le cas pour la suppression d’un élément afin d’éviter tout action faite par erreur et non désirée par l’utilisateur.
La solution que je vais présenter dans ce billet n’est en rien LA solution, mais une solution possible que j’utilise dans les projets sur lesquels je travaille.
Lire la suite…
En WPF ou en Silverlight, dès lors que l’on associe une collection de type ObservableCollection<T> à un contrôle de type ItemsControl, le simple ajout d’un item dans la collection permet de rafraichir le contrôle et de voir cet item sur l’UI.
Comment gérer l’utilisation d’une ObservableCollection<T>, lors du développement d’un ItemsControl personnalisé.
Lire la suite…
Lors du développement d’un contrôle, on définit des styles pour lui donner une apparence. Il n’est pas rare d’avoir besoin de ces styles dans différentes applications ou encore dans une assembly contenant des “UserControls”… Plutôt que de les redéfinir à chaque fois, nous allons voir comment les partager.
Lire la suite…
En WPF, comme en Silverlight, un contrôle est composé d’une partie graphique et d’une partie logique définissant son comportement. Le fichier generic.xaml qui accompagne le fichier de code MonControle.cs contient le Template par défaut du contrôle.
Lire la suite…
Aujourd’hui lorsqu’on parcours les différents blogs parlant du pattern MVVM, on s’aperçoit rapidement qu’il en existe plusieurs implémentations, faites la plupart du temps en fonction des besoins de chacun. L’implémentation que je vais présenter dans ce billet n’a rien de nouvelle, elle s’appuie sur un ensemble de pratiques que j’ai pu noter au travers de différents sites de bloggeurs ( John Papa, Glenn Block …). Le but étant de les rassembler dans ce billet.
Lire la suite…
Dans le billet précédent, nous avions développé une application d’export de données, dans laquelle les différents modules la composant étaient découverts via MEF. Les dll étaient déposées dans un répertoire nommé extensions.
Pour arriver à mettre en place cette petite application de démo, le DirectoryCatalog avait notamment été utilisé. Lire la suite…
Qu’est ce que MEF ?
MEF est un Framework permettant de développer des applications modulaires, composées de Parts. Vous trouverez d’un côté les Parts “Export” qui fournissent des services et de l’autre les Parts “Import” qui utilisent ces services. Dans l’utilisation de MEF que j’ai pu faire jusqu’à maintenant, j’ai tendance à dire qu’on a d’un côté l’application Core et de l’autre un ensemble de plugins respectant un contrat pour chaque service attendu.
Lire la suite…
Il m’arrive régulièrement de développer des applications WPF et de mettre également en place le pattern MVVM. Pour éviter de refaire à chaque fois ce développement simple, mais toujours identique, j’ai décidé de me créer un petit Template utilisable sous Visual Studio 2010.
Ce Template permet la création automatique de quatre projets:
-
L’application WPF dans laquelle se trouve, un bootstrapper chargé de créer un conteneur Unity pour la résolution des différents services enregistrés dans le fichier de configuration, et la résolution du couple ViewModel / View principal.
-
Un projet contenant les interfaces IMainViewModel et IMainView
-
Un projet contenant le ViewModel
-
Et un dernier avec la vue principale
Vous pouvez télécharger ce Template ici. Son contenu n’est réalisé qu’à titre d’exemple. Libre à vous de le modifier comme vous le souhaitez. Pour l’installer, modifiez l’extension en vsix après l’avoir téléchargé et exécutez le.
Pour vous expliquer plus concrètement ce qu’est une behavior, je vous renvoie vers le billet de Christian Schormann qui se charge parfaitement de faire ça.
Si vous parcourez de temps en temps ce blog vous aurez peut être remarqué qu’un des derniers billets portait sur la synchronisation de listbox lors du déplacement d’une scrollbar. Dans ce billet je vous propose de voir comment atteindre le même objectif mais en utilisant cette fois une behavior, le gros avantage étant que celle-ci soit utilisable directement sous Blend par un designer.
Lire la suite…