2010-06-04 6 views
2

Quelle est la meilleure approche pour trier une liste générique lorsque l'une de ses propriétés objets est modifiée?Trier tableau liste après que l'objet a été modifié

J'ai l'exemple suivant pour vous aider à expliquer ce dont vous avez besoin.

public class Sending 
{ 
    public Sending(int id, DateTime dateSent) 
    { 
     this.Id = id; 
     this.DateSent = dateSent; 
    } 

    public int Id { get; set; } 
    public DateTime DateSent { get; set; } 
} 

public class Operation 
{ 
    public List<Sending> ItemsSent = new List<Sending>(); 

    public Operation() 
    { 
     ItemsSent.Add(new Sending(1, new DateTime(2010, 6, 2))); 
     ItemsSent.Add(new Sending(2, new DateTime(2010, 6, 3))); 

     ItemsSent[1].DateSent = new DateTime(2010, 6, 1); 
    } 
} 

Quelle est la meilleure façon de déclencher une sorte sur la liste pour trier par date après que la propriété est définie DateSent? Ou devrais-je avoir une méthode pour mettre à jour la propriété et effectuer le tri?

Répondre

1

Vous pouvez implémenter IComparable<Sending> sur Sending et appeler Sort() sur le ItemsSent. Je suggère d'écrire une méthode pour mettre à jour un objet et mettre à jour la liste manuellement.

public class Sending: IComparable<Sending> 
{ 
    // ... 
    public int CompareTo(Sending other) 
    { 
    return other == null ? 1 : DateSent.CompareTo(other.DateSend); 
    } 
} 
+0

Merci Jason, c'est peut-être l'approche que j'utilise. Conseilleriez-vous de faire en sorte que la collection soit en lecture seule pour qu'on ne puisse pas l'ajouter? Sinon, il y aurait un scénario où la liste pourrait ne pas être triée. –

0

Ce que vous pouvez faire est d'implémenter INotifyChanged. Ensuite, faites quelque chose comme ça;

public class Sending : INotifyChanged 
{ 
    private int id; 
    private DateTime dateSent; 

    public Sending(int id, DateTime dateSent) 
    { 
     this.Id = id; 
     this.DateSent = dateSent; 
    } 

    public int Id { get; set; } 
    public DateTime DateSent 
    { 
     get 
     { 
      return this.dateSend; 
     } 
     set 
     { 
      this.dateSent = value; 
      OnPropertyChangerd("DateSent"); 
      //CallYou List<Sending> Sort method; 
     } 
} 

Chaque fois qu'une nouvelle valeur sera définie, la méthode de tri triera la liste.

+0

L'interface INotifyPropertyChanged? Cela ne signifie-t-il pas que je devrais remplacer la méthode "Add" de la liste et affecter un événement pour chaque objet ajouté à la collection afin que la méthode de tri puisse être déclenchée? Ou est-ce que je l'applique incorrectement? –

+0

Si je ne me suis pas trompé alors supposez que vous voulez trier la liste chaque fois que votre propriété dateent est modifiée ou ajoutée alors vous n'avez rien à faire de plus. – Johnny

Questions connexes