fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Collections.ObjectModel;
  15. using System.ComponentModel;
  16.  
  17.  
  18. namespace Esempio_Tab___List
  19. {
  20.  
  21. // Tipo di oggetto inseribile nella lista
  22. public class ObjT
  23. {
  24. // Nome ed età rappresentano i campi della lista
  25. public string Name { get; set; }
  26. public int Age { get; set; }
  27. public bool Graduate { get; set; }
  28. public eMusic Music { get; set; }
  29. }
  30.  
  31. // Enumerazione dei generi musicali
  32. public enum eMusic
  33. {
  34. Rock,
  35. Pop,
  36. Classic
  37. }
  38.  
  39.  
  40. // Finestra principale dell'applicazione
  41. public partial class MainWindow : Window
  42. {
  43. // Costruttore della finestra principale
  44. public MainWindow()
  45. {
  46. InitializeComponent();
  47. InitList();
  48. }
  49.  
  50.  
  51. /* La scelta del tipo di lista è importante!
  52.   * Ci sono essenzialmente due liste: List<T> e ObservableCollection<T>
  53.   *
  54.   * List<T>: è la collezione base, e presenta tutti i metodi più noti
  55.   * per gestire una lista; in particolare è possibile ordinarla (metodo Sort),
  56.   * ma una sua modifica (inserimento, rimozione, ...) non si riflette
  57.   * direttamente sulla ListView visualizzata dall'applicazione.
  58.   *
  59.   * ObservableCollection<T>: è la collezzione creata appositamente per gestire
  60.   * liste i cui cambiamenti (inserimento, rimozione, ...) devono essere
  61.   * riflessi su altri controlli mediante il Binding (in questo caso si fa il
  62.   * binding con gli oggetti della ListView); è la più adatta per questo tipo
  63.   * di lavoro (più efficiente e chiara), ma non è possibile ordinarla.
  64.   */
  65. private ObservableCollection<ObjT> list = new ObservableCollection<ObjT>();
  66.  
  67. /* Lista di oggetti, è la proprietà con cui si effettua il Binding con gli
  68.   * elementi della ListView. */
  69. public ObservableCollection<ObjT> ListOfObject
  70. {
  71. get
  72. { return list; }
  73. }
  74.  
  75.  
  76. // Metodo che inizializza la lista
  77. private void InitList()
  78. {
  79. list.Add(new ObjT { Name = "Marco", Age = 24, Graduate = true });
  80. list.Add(new ObjT { Name = "Nadia", Age = 18 });
  81. list.Add(new ObjT { Name = "Davide", Age = 21, Graduate = true });
  82. list.Add(new ObjT { Name = "Valentina", Age = 24, Graduate = true, Music = eMusic.Pop });
  83. list.Add(new ObjT { Name = "Orazio", Age = 54, Graduate = true, Music = eMusic.Classic });
  84. list.Add(new ObjT { Name = "Carolina", Age = 51, Graduate = true, Music = eMusic.Pop });
  85. list.Add(new ObjT { Name = "Federico", Age = 17 });
  86. list.Add(new ObjT { Name = "Francesco", Age = 10, Music = eMusic.Pop });
  87. list.Add(new ObjT { Name = "Valentina", Age = 23, Graduate = true, Music = eMusic.Pop });
  88.  
  89. /* Forse sarebbe più chiaro ed efficiente avere differenti
  90.   * ObservableCollection<T> e specificare per ognuna che tipo di ordinamento
  91.   * dev'essere fatto una volta che la lista è stata instanziata, ma
  92.   * dipende da cosa dovete fare. */
  93.  
  94. //var sorted = CollectionViewSource.GetDefaultView(ListOfObject);
  95. //sorted.SortDescriptions.Add(new SortDescription("Age", ListSortDirection.Ascending));
  96. }
  97.  
  98.  
  99. // Evento catturato quando viene selezionato un tab diverso
  100. private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
  101. {
  102. /* Ricrea una lista ordinata solo se il metodo è stato chiamato quando
  103.   * è stato selezionato un TabControl.
  104.   * Questo metodo dev'essere riscritto a seconda delle vostre necessità. */
  105. if (e.OriginalSource is TabControl && !TabByGroup.IsSelected)
  106. {
  107. IList<ObjT> sorted = null;
  108.  
  109. if (TabByAge.IsSelected)
  110. sorted = list.OrderBy(obj => obj.Age).ToList();
  111. else if (TabByName.IsSelected)
  112. sorted = list.OrderBy(obj => obj.Name).ToList();
  113.  
  114. list.Clear();
  115.  
  116. foreach (ObjT obj in sorted)
  117. list.Add(obj);
  118. }
  119. else if (e.OriginalSource is ListView)
  120. {
  121. ListView view = e.OriginalSource as ListView;
  122. ItemContainerGenerator generator = view.ItemContainerGenerator;
  123. ListViewItem item = generator.ContainerFromIndex(view.SelectedIndex) as ListViewItem;
  124.  
  125.  
  126. }
  127. }
  128.  
  129.  
  130. // Doppio click sulla lista ordinata per età, modifica il colore della riga
  131. private void SetDblClickColor(object sender, RoutedEventArgs e)
  132. {
  133. (sender as ListViewItem).Background = Brushes.LightPink;
  134. }
  135.  
  136. // Rimuove il relativo elemento della lista
  137. private void QuitBtn_Click(object sender, RoutedEventArgs e)
  138. {
  139. ObjT data = (sender as Button).DataContext as ObjT;
  140. list.Remove(data);
  141.  
  142. }
  143.  
  144.  
  145. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs args)
  146. {
  147.  
  148. }
  149.  
  150. }
  151.  
  152. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty