Databinding avec des collections
Bonjour à tous,
Je n'ai jamais utilisé de databinding jusqu'à maintenant. Pour afficher des collections de données dans des ListView, GridView, ComboBox, etc. J'ai toujours rempli ceux-ci manuellement dans le code :
Code:
1 2 3 4 5 6
|
foreach (Livre livre in LivreCollection)
{
ListViewItem livreListViewItem = new ListViewItem(livre.Titre);
livresListView.Items.Add(livreListViewItem);
} |
etc.
J'ai lu sur le databinding sur MSDN et je crois qu'utiliser le databinding allégerait mon code. D'après ce que je comprends, je ne serais pas obligé de me coder ma propre méthode (que j'appelle toujours RefreshListView) qui va effacer tous les items du ListView et va réinsérer les items de ma collection (en cas de changement dans celle-ci).
J'utilise beaucoup de ListView et presque jamais de GridView (bon ou pas bon ? je ne connais même pas les véritables avantages et les raisons qui devraient me pousser à préférer l'un à l'autre dépendamment des cas).
J'ai une classe Livre et une classe LivresCollection. La classe LivresCollection hérite de la classe List<T>.
J'aimerais "databinder" mon ListView directement sur ma collection LivresCollection. J'imagine que si j'enlève/modifie/ajoute des éléments de ma collection, le ListView se mettra à jour automatiquement, m'évitant ma fameuse méthode RefreshListView() ? Parce que c'est le seul avantage que je verrais au databinding : m'éviter de coder moi-même la gestion de l'affichage du ListView en fonction des données affichées.
En utilisant l'IDE, dans la boîte de propriétés de mon ListView, sous DataBindings, je clique sur le bouton "..." et de là je choisis "New Data Source". Étant donné que ma DataSource n'est pas un élément de base de données, je choisis "Objet" (je veux binder à ma collection LivresCollection). Une fois ceci choisi, je n'ai aucunement accès à ma collection LivresCollection. Je ne comprends pas pourquoi je ne peux pas naviguer dans les éléments de mon assembly. Peut-être que j'ai mal saisi à quoi la propriété DataBindings sert ?
Enfin, ce que je souhaite faire, c'est m'éviter d'écrire du code superflu si un quelconque composant du CLR peut le gérer pour moi. S'il est possible de "binder" un ListView à une collection, je préférerais procéder ainsi. Par contre, je suis complètement bloqué à l'heure actuelle.
La majorité des exemples que j'ai trouvé sur le web concernent le databinding de GridView à des DataSet, ce qui me semble relativement facile. Dans mon cas, je veux pouvoir le faire directement sur les collections que j'ai créées moi-même.
Merci d'avance pour vos éclaircissements.