2015-11-11 4 views
0

Я знаю, что вы можете настроить ListBox для сортировки автоматически. Есть ли способ «поймать» сортировку, чтобы, когда ListBox меняет положение двух элементов, чтобы я мог выполнять одно и то же переупорядочение в другом списке? Я хочу сортировать один список по значению, но сохраняю эти значения в тех же относительных местах индекса по сравнению с другим ListBox где-то в другом месте.Сортировка списка по отношению к другому

Я мог бы написать рутину, чтобы пузырь отсортировать список, чтобы я мог внести изменения самостоятельно, но мне интересно, если есть более автоматизированный, так как я, вероятно, придется сделать это в нескольких разных местах программы ,

ответ

0

К сожалению, объект Sorted не использует интерфейсную реализацию IComparable, просто сортирует результаты на основе результата ToString. Но вместо установки свойства Sorted вы можете использовать отсортированный источник данных (например, List<>).

Создайте класс обертки для элементов в ListBox и внесите в него интерфейс IComparable<T>. Заполните List<> этими ListBoxItem экземплярами, затем вызовите метод Sort в списке. Таким образом, вы сможете отправлять вызовы CompareTo.

public partial class Form1 : Form 
{ 
    private class ListBoxItem<T> : IComparable<ListBoxItem<T>> 
     where T : IComparable<T> 
    { 
     private T item; 

     internal ListBoxItem(T item) 
     { 
      this.item = item; 
     } 

     // this makes possible to cast a string to a ListBoxItem<string>, for example 
     public static implicit operator ListBoxItem<T>(T item) 
     { 
      return new ListBoxItem<T>(item); 
     } 

     public override string ToString() 
     { 
      return item.ToString(); 
     } 

     public int CompareTo(ListBoxItem<T> other) 
     {     
      return item.CompareTo(other.item); // here you can catch the comparison 
     } 
    } 

    public Form1() 
    { 
     InitializeComponent(); 
     var items = new List<ListBoxItem<string>> { "Banana", "Apple"}; 
     items.Sort(); 
     listBox1.DataSource = items; 
    } 
+0

Благодарим за помощь. – Popinjay

Смежные вопросы