2009-11-16 6 views
1

J'ai adopté le modèle suivant pour en mettant ListViewItems dans un ListView avec plusieurs colonnes (lorsque je veux afficher des informations sur une liste de types MyObject), et je suis juste curieux de voir si c'est la meilleure façon de accomplir cette tâche, ou s'il y a quelque chose de plus efficace et lisible dans le code:Meilleure façon de gérer ListViewItems dans un ListView détaillé?

  1. Créer une classe ListViewItem héritée qui prend un objet MyObject dans le constructeur - Je vais appeler cette MyObjectListViewItem - et une méthode Refresh() qui efface et re -popule les sous-éléments ListViewItem.
  2. Remplissez ListView avec mes nouveaux éléments MyObjectListViewItem.

exemple:

public MyObject MyObject { get; set; } 
public MyObjectListViewItem(MyObject myObj) 
{ 
    MyObject = myObj; 
    this.Refresh(); 
} 

public void Refresh() 
{ 
    this.SubItems.Clear(); 
    this.Text = myObj.FirstColumnProperty; 
    this.SubItems.Add(myObj.SecondColumnProperty); // etc... 
} 

Suggestions? De meilleures façons?

Répondre

1

Avez-vous envisagé d'utiliser un BindingSource ou de créer le vôtre qui implémente IBindingListView? Cela maintient les inquiétudes concernant les données et leur état étendu aux données elles-mêmes et non aux contrôles qui les consomment. Puisque les contrôles .NET sont déjà conçus pour fonctionner avec BindingSources, vous pouvez tirer parti de fonctionnalités plus robustes. Au lieu d'invoquer explicitement une actualisation d'écran, le contrôle est simplement responsable de répondre aux événements déclenchés par la source de liaison, et un contrôleur qui notifie si le contrôle est prêt à être actualisé sans le forcer. Créer ListViewItems qui savent comment se construire est une bonne idée.

+1

Cela ne fonctionnera pas. ListViews sous WinForms ne supporte pas BindingSources. – Grammarian

+0

Alas Forms.ListView ne prend pas en charge BindingSources. Considérez l'utilisation d'un DataGridView qui se connecte à la source de liaison. Chaque fois qu'un élément est ajouté ou supprimé de la source de liaison, la vue de données est automatiquement mise à jour. –

-1

Si vous étendez un peu cette idée, vous faites savoir aux colonnes comment créer chaque sous-élément, ce qui leur permet également de trier automatiquement ListView, de regrouper les supports et de copier/glisser-déposer des lignes. Ceci est juste quelques-unes des choses que ObjectListView fait pour vous. ObjectListView est un wrapper open source autour d'un contrôle .NET WinForms ListView qui rend la ListView beaucoup plus facile à utiliser - en plus d'ajouter de très belles nouvelles fonctionnalités et de contourner quelques bogues/limitations gênants.

Simple ObjectListView in action http://i38.tinypic.com/29zwu1d.jpg

Si vous avez aimé l'idée de @ Rex d'utiliser un BindingSource, le projet ObjectListView fournit également une connaissance des données DataListView qui est capable de se lier de données.

+0

Pourquoi voter pour cette réponse? La question a demandé des idées et des conseils sur de meilleures façons. C'est ce que cette réponse donne. – Grammarian

Questions connexes