une - listbox winform c#




C#Force ListBox pour mettre à jour des éléments (2)

Pourquoi ne pas mettre à jour manuellement le texte d'un article en question? Vous pouvez également envisager de déployer votre propre mécanisme de liaison de données pour ListBox. Et consultez ObjectListView pour voir si c'est utile.

Je sous-classe le contrôle ListBox standard. Je reçois notification des modifications apportées à l'un des éléments ajoutés à la liste. La tâche consiste à mettre à jour le texte affiché par ListBox pour l'élément qui change.

Je suis conscient que je pourrais juste enlever l'élément changé et l'ajouter à nouveau, mais cela ne semble pas préférable pour des raisons évidentes.


Malheureusement, la liaison de données dans ListView ne prend pas en charge les événements de notification de modification standard (item) ( FooChanged / INotifyPropertyChanged ). Cependant, si vous connaissez le changement, vous pouvez obtenir la liste pour se lier de nouveau. Puisque vous êtes sous-classe, vous pouvez appeler:

this.RefreshItems();

ou pour un seul article:

this.RefreshItem(index);

Sinon, puisque ce n'est pas public, vous pouvez le simuler en changeant DisplayMember :

lb.DisplayMember = "";
lb.DisplayMember = "Bar";

Un peu hacky, peut-être, mais cela fonctionne, et maintient la sélection actuelle etc (contrairement à la suppression de la DataSource ).





listbox