Сортировать массив \ список после изменения объекта - PullRequest
2 голосов
/ 04 июня 2010

Каков наилучший подход для сортировки общего списка при изменении свойства одного из его объектов?

У меня есть следующий пример, чтобы объяснить, что нужно.

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);
    }
}

Как лучше всего запустить сортировку в списке для сортировки по дате после установки свойства DateSent? Или у меня должен быть метод обновить свойство и выполнить сортировку?

Ответы [ 2 ]

1 голос
/ 04 июня 2010

Вы можете реализовать IComparable<Sending> на Sending и вызвать Sort() на ItemsSent. Я бы предложил написать метод для обновления объекта и обновления списка вручную.

public class Sending: IComparable<Sending>
{
  // ...
  public int CompareTo(Sending other)
  {
    return other == null ? 1 : DateSent.CompareTo(other.DateSend);  
  }
}
0 голосов
/ 04 июня 2010

Что вы можете сделать, так это сначала внедрить INotifyChanged. Тогда сделай что-нибудь подобное;

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;
         }
}

Таким образом, всякий раз, когда будет установлено новое значение, метод сортировки будет сортировать список.

...